티스토리 뷰
반응형
    
    
    
  목적
JPA 개념정리 및 사용법
정리하게된 계기
기존에는 Mybatis 를 사용하였는데 새프로젝트에서 JPA 를 사용하게되어 정리
JPA (Java Persistence API)
자바 ORM 을 위한 표준기술로 Hibernate, Spring JPA 와 같은 구현체가 있고 이것의 표준인터페이스
장점으로는 Mybatis 프로젝트와 비교하면 코드량이 줄고 객체위주 코드가 작성됨으로 가독성이 좋아지고
특정 데이터베이스에 종속되지 않는다.
단점으로는 복잡한 쿼리처리,성능저하위험,학습시간등 이있는데 복잡한 쿼리는 QueryDSL로 처리가 가능한거 같다.
| 개발환경 | |
| OS | 윈도우10 | 
| Jdk | 1.8 | 
| Framework | Spring Boot 2.7.0 | 
| DB | mysql 8.0 | 
패키지 구조

의존성추가
| 1 2 3 4 5 6 7 8 9 10 11 12 13 |         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-jpa</artifactId>         </dependency>         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <scope>runtime</scope>         </dependency> | cs | 
application.properties (Mysql 없이 H2를 이용하여 진행하여도 무관)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #JMX spring.jmx.enabled=false #mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/dev spring.datasource.username=lhj spring.datasource.password=aaaa spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true spring.jpa.hibernate.ddl-auto=update | cs | 
Member Entity (여기서는 Lombok을 활용하였음)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.healthofficer.domain.member; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.Comment; import org.springframework.util.Assert; import javax.persistence.*; @Entity @Getter @NoArgsConstructor public class Member {     @Id     @GeneratedValue(strategy = GenerationType.IDENTITY)     private Integer id;     private String name;     @Builder     public Member(int id,String name){         Assert.notNull(name, "name must not be null");         this.id = id;         this.name = name;     } } | cs | 
@Builder : JPA를 이용하면 Entity는 BUilder 기반으로 생성하는게 안전한 객체를 생성하는 방법
MemberRepository
| 1 2 3 4 5 | import com.healthofficer.domain.member.Member; import org.springframework.data.jpa.repository.JpaRepository; public interface MemberRepository extends JpaRepository<Member, Integer> { } | cs | 
JpaRepository를 상속하여 Spring Data Jpa 에서 제공하는 JPA 구현을 위한 인터페이스이며
사전에 정의된 여러메소드를 통해 CRUD 쿼리를 수행
DataJpaTest
테스트코드 작성
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package com.healthofficer; import com.healthofficer.dao.MemberRepository; import com.healthofficer.domain.member.Member; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.annotation.Commit; import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; @ExtendWith(SpringExtension.class) @DataJpaTest @Commit @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) public class 맴버등록_TEST {     @Autowired     MemberRepository memberRepository;     @BeforeEach     void 맴버등록(){         for(int i = 0; i < 5; i++){             Member m = Member.builder().name("name_"+i).build();             memberRepository.save(m);         }     }     @Test     void 맴버확인(){         List<Member> result = memberRepository.findAll();         assertEquals(result.size(), 5);     }     //@AfterEach     //void 맴버삭제(){     //    memberRepository.deleteAll();     //} } | cs | 

반응형
    
    
    
  'Spring' 카테고리의 다른 글
| Spring Boot zip END header not found (0) | 2022.11.02 | 
|---|---|
| Spring Boot Connection Pool 설정 (0) | 2022.11.01 | 
| Spring Data Redis 로 Redis 연동 (0) | 2022.09.20 | 
| Intellij Spring boot Jmx RMI remote objects have benn exported (0) | 2022.09.13 | 
| Spring + Mssql + Mybatis 연동 (0) | 2019.12.03 | 
반응형
    
    
    
  
                      공지사항
                      
                  
                
                  
                  
                    최근에 올라온 글
                    
                
                  
                  
                    최근에 달린 댓글
                    
                
                  
                  - Total
- Today
- Yesterday
                    링크
                    
                
                  
                  
                    TAG
                    
                
                  
                  - cursorAI
- Enum Equals ==
- spring boot jpa crud
- oubox pattern
- SpringBatch 5.1.1
- spring security
- cursor ai crud
- 배치 모니터링
- JdbcBatchItem
- Spring Actuator
- cursor ai
- custom Item writer
- 배치 관리 ui
- no `meta.properties` found in
- 스케줄링 시스템
- Enum equals
- spring boot jpa
- quartz 실무 적용
- Enum ==
- kafka srping event
- actuator prometheus grafana
- 잡 스케줄링
- kafka oubox
- kafka redis
- CompositeItemWriter
- tomcat gzip
- cursor ai 프롬프트
- cursor ai 프로젝트
- Spring boot Actuator
- quartz spring batch
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
                    글 보관함
                    
                
            