ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     


     

    실습)

     

     

Designed by Tistory.