Whiteship Spring JPA, 쿼리 만들기
2020-10-31
쿼리 만들기
쿼리 만드는 전략
org.springframework.data.repository.query.QueryLookupStrategy.Key
public static enum Key {
CREATE, USE_DECLARED_QUERY, CREATE_IF_NOT_FOUND;
//...
}
CREATE
: JpaRepository 의 interface 의 메소드 명을 분석하여 쿼리를 만들어 준다.USE_DECLARED_QUERY
: 미리 정의되어 있는 쿼리를 찾아서 사용하는것 -> 기본값은 JPQL, native 를 사용하고 싶다면@Query(query="SELECT ~~", nativeQuery=true)
설정.- ‘CREATE_IF_NOT_FOUND’ : 미리 정의한 쿼리가 있으면 쓰고, 없으면 만들기 -> 위의 두개를 모두 사용 -> 기본값
위의 전략을 변경하려면 @EnableJpaRepositories(queryLookupStrategy=queryLookupStrategy.Key.CREATE_IF_NOT_FOUND)
이런식으로 변경할 수 있다.
미리 정의 되어 있는 쿼리를 찾는 순서는 @Query
, @Procedure
(정확치않음), @NamedQuery
순서이다.
메소드명으로 쿼리를 만드는 방법
like 를 사용할 경우
List<User> findByUsernameLike(String username);
List<User> findByUsernameStartingWith(String username);
List<User> findByUsernameEndingWith(String username);
List<User> findByUsernameContaining(String username);
List<Comment> findByCountGreaterThan(int count);
List<Comment> findByCountGreaterThanOrderByCountDesc(int count);
List<Comment> findByTextContaining(String text);
List<Comment> findByTextContains(String text); //findByTextContaining 차이없음
List<Comment> findByTextContainingIgnoreCase(String text);
List<Comment> findByTextContainingIgnoreCaseAndCountGreaterThan(String text, int count);
Page<Comment> findByTextContainingIgnoreCase(String text, Pageable pageable);
Stream<Comment> findByTextContainingIgnoreCaseAndCountLessThan(String text, int count);