Core concepts

Dev.Hammy·2024년 4월 19일
0

Spring Data JPA

목록 보기
2/13

Spring Data 저장소 추상화의 중앙 인터페이스는 Repository입니다. 관리할 도메인 클래스와 도메인 클래스의 식별자 유형을 유형 인수로 사용합니다. 이 인터페이스는 주로 작업할 유형을 캡처하고 이 인터페이스를 확장하는 인터페이스를 검색하는 데 도움이 되는 마커 인터페이스 역할을 합니다. CrudRepositoryListCrudRepository 인터페이스는 관리되는 엔터티 클래스에 대한 정교한 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 외에도 엔터티에 대한 페이지 매김 액세스를 쉽게 하기 위해 추가 메서드를 추가하는 PagingAndSortingRepositoryListPagingAndSortingRepository가 있습니다.

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);
}

0개의 댓글