Spring Data 저장소 추상화의 중앙 인터페이스는 Repository
입니다. 관리할 도메인 클래스와 도메인 클래스의 식별자 유형을 유형 인수로 사용합니다. 이 인터페이스는 주로 작업할 유형을 캡처하고 이 인터페이스를 확장하는 인터페이스를 검색하는 데 도움이 되는 마커 인터페이스 역할을 합니다. CrudRepository
및 ListCrudRepository
인터페이스는 관리되는 엔터티 클래스에 대한 정교한 CRUD 기능을 제공합니다.
CrudRepository Interface
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); // (1)
Optional<T> findById(ID primaryKey); // (2)
Iterable<T> findAll(); // (3)
long count(); // (4)
void delete(T entity); // (5)
boolean existsById(ID primaryKey); // (6)
// … more functionality omitted.
}
(1) 지정된 엔터티를 저장합니다.
(2) 지정된 ID로 식별되는 엔터티를 반환합니다.
(3) 모든 엔터티를 반환합니다.
(4) 엔터티 수를 반환합니다.
(5) 지정된 엔터티를 삭제합니다.
(6) 지정된 ID를 가진 엔터티가 존재하는지 여부를 나타냅니다.
이 인터페이스에 선언된 메서드를 일반적으로 CRUD 메서드라고 합니다. ListCrudRepository
는 동등한 메소드를 제공하지만 CrudRepository
메소드가 Iterable
을 반환하는 List
를 반환합니다.
[Note]
또한JpaRepository
또는MongoRepository
와 같은 지속성 기술별 추상화도 제공합니다. 이러한 인터페이스는CrudRepository
를 확장하고CrudRepository
와 같이 다소 일반적인 지속성 기술(persistence technology)에 구애받지 않는 인터페이스 외에도 기본 지속성 기술의 기능을 노출합니다.
CrudRepository
외에도 엔터티에 대한 페이지 매김 액세스를 쉽게 하기 위해 추가 메서드를 추가하는 PagingAndSortingRepository
및 ListPagingAndSortingRepository
가 있습니다.
PagingAndSortingRepository interface
public interface PagingAndSortingRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
[Note]
확장 인터페이스는 실제 저장소 모듈에서 지원될 수 있습니다. 이 문서에서는 일반적인 계획(scheme)을 설명하지만 저장소 모듈이 사용하려는 인터페이스를 지원하는지 확인하십시오.
페이지 크기 20으로 User
의 두 번째 페이지에 액세스하려면 다음과 같이 할 수 있습니다.
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));
ListPagingAndSortingRepository
는 동등한 메서드를 제공하지만 PagingAndSortingRepository
메서드가 Iterable
을 반환하는 List
를 반환합니다.
쿼리 방식 외에도 개수 쿼리와 삭제 쿼리 모두에 대한 쿼리 파생이 가능합니다. 다음 목록은 파생된 카운트 쿼리에 대한 인터페이스 정의를 보여줍니다.
Derived Count Query
interface UserRepository extends CrudRepository<User, Long> {
long countByLastname(String lastname);
}
다음 목록은 파생된 삭제 쿼리에 대한 인터페이스 정의를 보여줍니다.
Derived Delete Query
interface UserRepository extends CrudRepository<User, Long> {
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}