Spring/Spring Data JPA

Spring Data JPA 공통 인터페이스

민철킹 2021. 6. 10. 22:15

Spring Data JPA를 사용하게되면 인터페이스를 상속받는 것 만으로도 save, findById 와 같이 제공되는 메서드를 구현없이 사용할 수 있다. 어떻게 이것이 가능한 것일까?  주입받은 memberRepository 인스턴스를 직접 출력해보자.

Spring Data JPA가 인터페이스를 보고 구현클래스를 만들어 프록시 객체를 만들어 넣어준 것이다. 따라서 우리는 인터페이스만 만들어 놓으면 구현체는 Spring Data JPA가 만들어 주입해준다.

또한 @Repository 애노테이션 생략이 가능하다. 컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리한다.

JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리해준다.(원래는 @Repository가 하는 기능임)

JpaRepository를 상속받을 때 제네릭 타입의 T에는 엔티티 타입, ID에는 식별자 타입(PK)을 넣어주면 된다.

 

JpaRepository는 JPA에 특화된 것들이 제공되고, 상위는 공통으로 사용되는 것이다.(Spring Data Mongo 등등)

 

 

주요 메서드

save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다.

delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출

findById(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출

getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출

findAll(…) : 모든 엔티티를 조회한다. 정렬( Sort )이나 페이징( Pageable ) 조건을 파라미터로 제공할 수 있다.

 

 

 

반응형

'Spring > Spring Data JPA' 카테고리의 다른 글

@EntityGraph  (0) 2021.06.14
벌크성 수정 쿼리  (0) 2021.06.14
페이징과 정렬  (0) 2021.06.13
쿼리 메서드 기능  (0) 2021.06.11
스프링 데이터 JPA 맛보기  (0) 2021.06.07