Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Spring Data: CrudRepository와 JpaRepository의 차이점 총정리

CrudRepository와 JpaRepository는 모두 스프링 데이터(Spring Data) 리포지토리 라이브러리에서 제공하는 인터페이스입니다. 스프링 데이터 리포지토리는 다양한 영속성 계층(persistence layer)의 데이터에 접근할 수 있도록 미리 정의된 finder 메서드를 제공하여, 개발자가 반복해서 작성해야 하는 보일러플레이트 코드를 크게 줄여 줍니다.

JpaRepository는 CrudRepository와 PagingAndSortingRepository를 확장(extends)한 인터페이스입니다. 따라서 CrudRepository가 제공하는 findOne, save, delete 같은 기본 메서드를 그대로 상속받으며, 여기에 더해 배치(batch) 단위 레코드 삭제, 데이터를 데이터베이스에 즉시 플러시(flush)하는 기능, 페이징과 정렬 관련 메서드 등 JPA 특화 기능을 추가로 제공합니다.

애플리케이션에서 이들 리포지토리 인터페이스를 상속하기만 하면 내부의 모든 메서드를 바로 사용할 수 있습니다. 또한 비즈니스 요구사항에 맞춰 네임드 쿼리(named query)나 네이티브 쿼리(native query)를 활용해 새로운 메서드를 직접 추가할 수도 있습니다.

번호구분JpaRepositoryCrudRepository
1계층 구조JpaRepository는 CrudRepository와 PagingAndSortingRepository를 모두 확장합니다.CrudRepository는 기본(base) 인터페이스로, 마커(marker) 인터페이스 역할을 합니다.
2배치 지원배치 단위 레코드 삭제, 데이터를 데이터베이스에 직접 플러시하는 등 JPA 관련 추가 메서드를 제공합니다.findOne, save 등 CRUD 기능만 제공합니다.
3페이징 지원PagingAndSortingRepository까지 함께 확장하므로 페이징 구현에 유용한 모든 메서드를 제공합니다.페이징과 정렬을 위한 메서드는 제공하지 않습니다.
4사용 사례JpaRepository는 리포지토리를 JPA 영속성 기술에 종속시키므로 가능하면 사용을 피하는 것이 좋습니다.정렬과 페이징이 필요한지 여부에 따라 CrudRepository 또는 PagingAndSortingRepository를 선택해 사용하는 것이 바람직합니다.

JpaRepository 예제

@Repository
public interface BookDAO extends JpaRepository {
    Book findByAuthor(@Param("id") Integer id);
}

CrudRepository 예제

@Repository
public interface BookDAO extends CrudRepository {
    Book findById(@Param("id") Integer id);
}