7.쿼리 메서드
스프링 데이터에서 제공하는 Repository 인터페이스를 상속한 다양한 하위 Repository 인터페이스들을 통해 개발자는 기본적인 CRUD 처리 로직을 간편하게 구현할 수 있음
// CrudRepository 인터페이스는 Repository 인터페이스를 확장하였음
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); // (1) 인수로 전달받은 entity 저장
Optional<T> findById(ID primaryKey); // (2) 인수로 전달받은 id에 해당하는 entity 조회
Iterable<T> findAll(); // (3) 전체 엔티티 조회
long count(); // (4) 총 entity 개수 조회(long 타입)
void delete(T entity); // (5) 전달받은 entity 제거
boolean existsById(ID primaryKey); // (6) 전달받은 id에 해당하는 엔티티가 존재하는지?
// … more functionality omitted.
}하지만 이런 기본 메서드 외에 Like, StartsWith와 같은 부가적인 조건 연산 및 오름차순/내림차순 등의 정렬을 거쳐서 데이터를 조회해야 할 때도 있음
따라서 Spring Data에서는 이런 요구사항도 빠르게 구현할 수 있도록 별도의 커스텀 메서드들을 제공함
1.쿼리 메서드(Query Method)
쿼리 메서드란 다음과 같은 특징을 가지고 있음
개발자가 메서드의 이름을 정해진 규칙과 패턴에 맞게 작성하면 Spring Data가 해당 메서드의 이름을 기반으로 적절한 SQL 쿼리를 만들어 실행해줌
예를 들어 lastname과 firstname이 모두 일치하는 사용자를 조회할 때는 다음과 같은 메서드를 사용 중인 XxxRepository 인터페이스에 정의하면 됨
public interface OwnerRepository<Owner, Long> extends Repository<T, ID> {
// … where x.lastname = ?1 and x.firstname = ?2
findByLastnameAndFirstname(String lastname, String firstname);
}이러한 규칙과 패턴은 기본적으로 Java의 메서드 네이밍 컨벤션인 camelCase를 따르며,
그 외 개별적인 기준은 다음과 같음
1-1. 엔티티를 조회하는 경우
엔티티를 조회할 때는 find..By, read..By, search..By 형태로 이름을 지어야 하며,
주로 find..By의 패턴으로 메서드 명을 작성해야 함
1-2. 조회된 엔티티에 대한 레코드 개수를 카운트하는 경우
조회된 엔티티의 총 결과 레코드의 개수를 카운트할 때는 count..By 패턴으로 작성해야 함
1-3. 해당 엔티티의 존재 여부를 확인하는 경우
엔티티가 존재하는지 확인하는 경우에는 exists..By 패턴으로 작성해야 함
1-4. 엔티티를 제거하는 경우
엔티티를 제거할 때는 delete..By, remove..By 패턴으로 작성해야 함
그 외, 모든 데이터를 조회할 때는 All을 사용하거나, 중복을 제거할 때는 Distinct 등을 활용