Repository 인터페이스를 만들고 JpaRepository를 상속받아 사용한다.
상속 관계를 다이어그램으로 살펴보면 위와 같고 JpaRepository를 상속받으므로써 이미 구현되어있는 save(), findAll() 등과 같은 필요한 거의 모든 메서드를 바로 사용할 수 있다.
스프링 데이터 JPA는 JpaRepository 라는 인터페이스를 제공하는데, 여기에 기본적인 CRUD 기능이 모두 제공된다. (일반적으로 상상할 수 있는 모든 기능이 다 포함되어 있다.)
하지만 interface이기 때문에 구현체가 필요한거 아니야??
구현체도 스프링 데이터 JPA가 알아서 만들고 주입해준다.
위와 같은 메서드는 모두 필요없어진다.
findByName은 공통할 수 없으므로 JpaRepository에서 제공하는 메서드가 아니다. 따라서 interface에 구현해줘야함.
원래라면 interface를 작성하고 로직을 구현해주어야하지만, 스프링 데이터 JPA를 사용하게 되면 위와 같은 선언만으로도 모든 것이 해결된다. (???????????????)
스프링 데이터 JPA는 findBy~~~의 형태를 보고 findByName에서 name을 추출한다. 그 후 select m from member m where m.name = :name와 같은 쿼리를 날려 알아서 조회 로직을 만들어준다.
즉, 개발자는 인터페이스만 구현하면 되는 것이다. 하지만, 스프링 데이터 JPA는 JPA를 사용해서 이런 기능을 제공할 뿐이다.(인터페이스일 뿐이다.) 결국 JPA 자체를 잘 이해하는 것이 가장 중요하다.
https://spring.io/projects/spring-data-jpa
'Spring > Spring Data JPA' 카테고리의 다른 글
@EntityGraph (0) | 2021.06.14 |
---|---|
벌크성 수정 쿼리 (0) | 2021.06.14 |
페이징과 정렬 (0) | 2021.06.13 |
쿼리 메서드 기능 (0) | 2021.06.11 |
Spring Data JPA 공통 인터페이스 (0) | 2021.06.10 |