Spring Data JPA를 사용하여 Repository를 만들면 쉽게 Repository를 만들 수 있을 뿐만 아니라
Repository가 간결해진다.
Service에서 Repository로 가지 않아도 Service에서 DB접근을 하여 처리를 해줄 수 있다.
이러한 편리함에 Spring Data JPA를 바로 접하면 JPQL 공부를 하지 않고 Spring Data JPA로 바로 넘어갈 수도 있다.
그런데 그렇게 되면 나중에 문제가 생길 수도 있다.
Spring Data JPA로 해결이 안되는 이슈가 생길 수도 있기 때문이다.
JPQL을 편리하게 사용할 수 있도록 만든 것이 Spring Data JPA이다.
따라서 JPQL을 공부하면 Spring Data JPA 사용은 자동으로 따라온다.
처음에 JPQL을 공부하고 Spring Data JPA를 봤을 때는 똑같은거로 보여서 굳이 Spring Data JPA를 왜쓰는 건지 의문이었다.
Spring Data JPA를 써보면서 알게 된 점은 Spring Data JPA는 JPA로 만드는 기본적인 기능들(CRUD)을 미리 다 구현해 놓은 것이었다. 필요한 기능들을 가져다가 쓰기만 하면 된다.
구조는 다음과 같다
Repository
⬆️
CrudRepository
⬆️
PagingAndSortingRepository
⬆️
JpaRepository
⬆️
MedicalAppointmentRepository
// MedicalAppointmentRepository 인터페이스는 JpaRepository를 상속받고 있다.
public interface MedicalAppointmentRepository extends JpaRepository<MedicalAppointment, Long>
// JpaRepository는 PagingAndSortingRepository, QueryByExampleExecutor를 상속받고 있다.
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
// PagingAndSortingRepository는 CrudRepository를 상속받고 있다.
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>
// CrudRepository는 Repository를 상속받고 있다.
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID>
@Indexed
public interface Repository<T, ID>
결론
// MedicalAppointmentRepository 인터페이스는 JpaRepository를 상속받고 있다.
public interface MedicalAppointmentRepository extends JpaRepository<MedicalAppointment, Long>
따라서 인터페이스 형식으로 JpaRepository를 상속받으면 Crud와 관련된 기능들을 쓸 수 있는 것이다.
댓글