Spring/Spring Data JPA

[Spring Data JPA] 3-1. Defining Query Methods (1)

noahkim_ 2024. 8. 2. 10:58

1. Query Lookup Strategies

@EnableJpaRepositories (queryLookupStrategy)

CREATE_IF_NOT_FOUND (default)
  • 선언된 쿼리 -> 쿼리 생성 (메서드 이름 기반)

 

CREATE
  • 쿼리 생성
  • 메서드 이름 기반 (접두사 제외)

 

USE_DECLARED_QUERY
  • 선언된 쿼리를 찾으려 시도 (어노테이션)
  • 찾을 수 없으면 예외 발생 (부트스트랩 시점)

 

2. Query Creation

Query Builder Mechanism

JPQL Query Creation from method name
interface PersonRepository extends Repository<Person, Long> {

  // 여러 조건을 사용한 쿼리
  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // distinct 플래그를 활성화한 쿼리
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // 개별 속성에 대해 대소문자 무시를 활성화한 쿼리
  List<Person> findByLastnameIgnoreCase(String lastname);
  // 모든 적합한 속성에 대해 대소문자 무시를 활성화한 쿼리
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // 정적 ORDER BY를 활성화한 쿼리
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}

 

Parsing Query Method Name

subject
  • 쿼리 목적 (메서드 도입부)

 

limit
  • 결과 제한 (메서드 도입부 이후)
  • Distinct, Top, First

 

predicate
  • 쿼리 조건 (By~)
  • 연결 가능 (And, Or)

 

연산자
  • Between, LessThan, GreaterThan, Like

 

order
  • OrderBy~Asc, OrderBy~Desc

 

대소문자 무시
  • IgnoreCase, AllIgnoreCase

 

3. Property Expressions

  • 메서드 이름에서 엔티티 속성 접근 방식
  • 기본 속성 접근 or 중첩 속성 접근

 

List<Person> findByAddressZipCode(ZipCode zipCode);
  • 전체 속성 해석: 전체 속성 이름을 하나의 속성으로 시도
  • 부분 속성 해석: 오른쪽에서부터 camelCase 부분으로 나누어 시도 -> 나머지 부분 탐색 (재귀적)

 

 

 

출처