CrudRepository
와 PagingAndSortingRepository
를 제공한다.JpaRepository
, CassandraRepository
, MongoRepository
etc..
CrudRepository
에 내장된 대표적인 기본 메서드는 다음과 같다.public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID primaryKey);
Iterable<T> findAll();
long count();
void delete(T entity);
boolean existsById(ID primaryKey);
// … more functionality omitted.
}
CrudRepository
를 상속하고 Sort나 Pageable 객체를 인자로 받는 메서드가 추가된다.public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
내부를 직접 구현
해야한다.자동화된 Named Query
를 사용할 수 없다.auditing 기능
도 역시 지원받을 수 없다.Spring-Data는 Spring의 핵심 기능 중 하나인 PSA(Portable Service Abstraction)를 잘 보여주는 프로젝트인 듯하다. Spring-Data가 제공하는 추상화된 레파지토리는 일종의 어댑터 역할을 함으로써 실제 사용하는 데이터베이스가 얼마든지 바뀌어도 공통 API로 쉽게 개발할 수 있도록 도와준다.
Spring으로 개발을 한다면 개발자의 편의성과 생산성을 높여주는 Spring-Data를 안쓸이유가 없는 것 같다. 실무에서는 Spring Data JPA를 많이 쓰지만, 최근 출시된 Spring Data JDBC도 단순함과 직관성이 강조된다는 측면에서 주목해볼 만한 기술인 것 같다.