-
Spring Data JPA 3. 쿼리 메서드Spring/Spring Data JPA 2020. 6. 2. 00:30
쿼리 메서드 정의하기 2가지 방법
- 메서드 이름에서 직접 쿼리를 끄집어내는 방법
- 직접 정의되어 있는 쿼리를 애노테이션을 통해 가져오는 방법
Query를 가져오는 전략 3가지
EnableJPARepositories에 보면 queryLookupStrategy라는 애노테이션이 있고 3가지 중 하나를 설정할 수 있다.
1. CREATE
- 쿼리 메소드 이름 가지고 쿼리를 만든다. well-known prefix를 제거하고
- 나머지를 파싱해서 메서드를 만든다. findById 등
2. USE_DECLARED_QUERY
- 미리 정의된 쿼리를 찾으려 한다. 찾지 못하면 예외를 던지게 된다.
- App이 뜨는 시점에 쿼리를 못 찾으면 fail.
3. CREATE_IF_NOT_FOUND ( default )
- 1,2를 합친 것. 선언된 쿼리를 먼저 찾고 없다면 메서드를 가지고 적절한 쿼리를 만들게 된다.
- 즉 findByName, findByEmail을 만들었다 하더라도 우리가 그 위에 쿼리라는 애노테이션을 붙인다면
- 메서드를 가지고 만드는 게 아닌 그 쿼리를 쓰게 된다는 것이다.
- 스프링 부트로 실행을 했고
- 스프링 데이터 JPA가 들어가 있으니 스프링 부트가 알아서 EnableJPARepositories를 활성화시켜준다
- H2를 의존성으로 넣고 데이터 소스를 찾다가 없다면 H2로 메모리 DB를 만들어서 동작시킬 것이다.
- 이런 방법은 쿼리를 해당 도메인에 특화돼있는 리포지토리로 한정 짓는 게 유리하다.
- find_By, read_By, query_By, count_By, get_By 등을 벗기고 나머지를 파싱 하게 된다.
- Distinct를 통해 중복을 제거할 수도 있다.
- By 다음은 실제 프로퍼티들이 정확히 와야 된다.
- 그리고 And나 Or을 통해 조건을 추가할 수 있다.
- Asc Desc로 정렬도 가능하다.
그 외에
- And 나 Or 가지고 조건절을 연결할 수 있고 그 외에도 Between, LessThan, GreaterThan , Like 역시 쓸 수 있다.
- IgnoreCase를 사용해 대소문자 구별을 없앨 수도 있다. String 타입 등
예) findByLastnameAndFirstnameAllIgnoreCase
실습)
'Spring > Spring Data JPA' 카테고리의 다른 글
Spring Data JPA 2. null 처리 관련 애노테이션 (31) 2020.06.01 JPA의 Dialect(방언) (0) 2020.05.25 영속성 컨텍스트(persistence context) (0) 2020.05.24 Spring Data JPA 1. 상속구조와 주요 인터페이스 (0) 2020.05.12 하이버네이트 ORM User guide 1 (0) 2020.05.11