예시) 회원의 아이디와 이름를 담는 Entity를 만든다한다면
1.Member 클래스 생성 후 어노테이션 지정
@Entity :엔티티를 선언하는 어노테이션
@Getter @Setter : 롬복을 이용할때 getter,setter를 롬복이 생성하도록 하는 어노테이션
@Id : PK를 지정하는 어노테이션
@GeneratedValue : 아이디값을 자동 생성하는 어노테이션
위의 코드에서는 id 값이 PK가되고 자동으로 값이 들어가게된다.
2.MemberRepository 클래스 생성 후 어노테이션 지정
@Repository : 리파지토리를 지정하는 어노테이션
@PersistanceContext: persistance 컨텍스트 지정 EntityManager를 주입(DI)함
회원정보를 저장하는 save 메소드와 조회하는 find 메소드를 만들었다
em.persist(엔티티) : 엔티티를 insert할 때 사용하는 메소드
em.find(타입 , PK키) : 엔티티를 select 할 때 사용하는 메소드 pk키로 데이터를 조회하고 지정한 타입으로 리턴받는다.
3.테스트 코드 생성
1.MemberRepository 테스트 코드 생성
해당 Repository에서 ctrl+shift+T (window 단축키)
2.Create New Test를 클릭한 후
3.위의 창에서 테스트 를 설정한 후 OK를 클릭하면
4.테스트 폴더에 테스트 클래스가 생성된다.
-테스트코드 설명
@SpringBootTest : 스프링 부트 테스트 어노테이션
@Autowired: 의존객체 주입 어노테이션 MemberRepository를 주입 받았다
@Test : 테스트 메서드 지정 어노테이션
@Transactional : 트랜젝션 지정 어노테이션 JPA는 트렌젝션 안에서 돌아가야하기 때문에 트랜젝션을 지정해준다.
@Rollback(value = false) : 테스트 코드는 마지막에 default로 롤백을 시키기 때문에 데이터가 들어가는 것을 확인 하기위해 Rollback을 false로 지정해준다.
Member 를 생성하여 이름을 지정해주고 저장하고 아이디를 리턴받아 해당아이디로 엔티티를 조회하였다.
*appilcation.yml 파일에 show_sql이 true로 지정되 있다면 콘솔창에 쿼리가 나온다
위 코드를 실행하여 쿼리를 확인해 보면 insert 문은 찍히지만 select 문은 찍히지 않는다
이는 JPA에서 save 메서드를 통해 insert를 하면서 해당 엔티티를 영속성컨택스트(1차 캐시)에 저장하기 떄문에
그 다음으로 실행된 find 메서드는 1차 캐시에 해당 PK를 갖는 값이 있는지 먼저 확인하고 값이 있다면 그 데이터를 반환하고 없을때 DB에 select 쿼리를 날린다.
'JPA' 카테고리의 다른 글
JPA 공부 1 - 영속성 컨텍스트 (0) | 2021.06.03 |
---|---|
Springboot- JPA 페이징처리 (0) | 2020.11.20 |
JPA 패치조인 활용 (0) | 2020.11.13 |
SPRING - JPA를 활용한 API 개발 ( 권장하는 방법 ) (0) | 2020.11.13 |
SPRING - JPA를 활용한 API 개발 (비권장) (0) | 2020.11.13 |