본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


JPA

SPRING BOOT-JPA entity , repository 생성과 테스트 코드 생성

반응형

예시) 회원의 아이디와  이름를 담는 Entity를 만든다한다면

 

 1.Member 클래스 생성 후 어노테이션 지정

-Member 엔티티-

@Entity :엔티티를 선언하는 어노테이션

@Getter @Setter : 롬복을 이용할때 getter,setter를 롬복이 생성하도록 하는 어노테이션

@Id : PK를 지정하는 어노테이션

@GeneratedValue : 아이디값을 자동 생성하는 어노테이션    

 

위의 코드에서는 id 값이 PK가되고 자동으로 값이 들어가게된다.

 

2.MemberRepository 클래스 생성 후 어노테이션 지정

 

-MemberRepository-

@Repository : 리파지토리를 지정하는 어노테이션

@PersistanceContext:  persistance 컨텍스트 지정 EntityManager를 주입(DI)함

 

회원정보를 저장하는 save 메소드와  조회하는 find 메소드를 만들었다

 

em.persist(엔티티) : 엔티티를 insert할 때 사용하는 메소드

em.find(타입 , PK키) : 엔티티를 select 할 때 사용하는 메소드 pk키로 데이터를 조회하고 지정한 타입으로 리턴받는다. 

 

3.테스트 코드 생성

 

1.MemberRepository 테스트 코드 생성

해당 Repository에서 ctrl+shift+T (window 단축키)  

-ctrl+shift+T-

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 쿼리를 날린다. 

반응형