본문 바로가기

Spring/JPA

Spring JPA - 쿼리 생성

 

The query builder mechanism built into the Spring Data repository infrastructure is useful for building constraining queries over entities of the repository.

The following example shows how to create a number of queries:

 

// 메서드 이름에서 쿼리 생성

interface PersonRepository extends Repository<Person, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property
  List<Person> findByLastnameIgnoreCase(String lastname);
  // Enabling ignoring case for all suitable properties
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}

 

쿼리 메서드명은 주제와 술어 부분으로 나뉨

find...By, exists...By와 같이 쿼리의 주제를 정의하고 술어를 더함

제목에는 추가 표현이 포함될 수 있음

생성할 쿼리에 고유한 플래그를 설정하거나 결과 제한 키워드(ex. find)를 사용하지 않는 한 사이의 모든 텍스트는 By

 

부록은 쿼리 메서드 주제 키워드의 전체 목록 정렬 및 대소문자 수정자를 포함한 술어 메서드 쿼리를 포함하고 있다.

그러나 첫 번째 By는 실제 기준 술어의 시작을 나타내는 구분 기호 역할을 한다.

매우 기본적인 수준에서 Entity속성에 대한 조건을 정의하고 And 와 Or로 연결할 수 있다.

 

메서드 구문분석의 실제 결과는 쿼리를 만드는 영속성 저장소에따라 다르다.

그러나 몇 가지 일반적인 사항이 있다.

 

표현(어구)은 대게 연결될 수 있는 연산자와 결합된 속성 순회

AND와 OR로 속성 표현을 연결할 수 있다.

또한 속성 식에 대한 Between, LessThan, GreaterThan, Like와 같은 연산자를 지원한다.

지원되는 연산자는 다양한 데이터 저장소에 따라 다양할 수 있으니 참조문서의 해당 부분을 참조해라.

 

메서드 파서(구문 해석 프로그램)는 개별 속성(ex. findByLastnameIgnoreCase(…)) 또는 대소문자 무시를 지원하는 형식의 모든 속성(ex. findByLastnameAndFirstnameAllIgnoreCase(…))에 대해 IgnoreCase 플래그 설정을 지원한다.

대소문자 무시는 저장소에 따라 다를 수 있으니 저장소별 쿼리 메서드는 참조 문서의 관련 섹션을 참조해라.

 

속성을 참조하는 쿼리 메서드에 OrderBy절을 추가하고 정렬 방향(Asc 또는 Desc)을 제공하여 정적 순서를 적용할 수 있다.

 

동적 정렬을 지원하는 쿼리 메서드를 만들려면 "특수 매개변수 처리"를 참조