[JPA] 스프링 데이터 JPA 쿼리 메서드

Junseo Kim·2020년 3월 31일
0

Spring Data JPA 쿼리 메서드

기본 keyword 목록

  • And, Or
  • Is, Equals
  • LessThan, LessThanEqual, GreaterThan, GreaterThanEqual
  • After, Before
  • IsNull, IsNotNull, NotNull
  • Like, NotLike
  • StartingWith, EndingWith, Containing
  • OrderBy
  • Not, In, NotIn
  • True, False
  • IgnoreCase

위의 keyword를 조합해서 만든다.
Ex. List<Post> findByTitleStartsWith(String title);

@NamedQuery

xml이나 자바파일에 JPQL 또는 native query를 정의해놓고, 쿼리를 정의할 때 사용한 name값을 가지고 사용하는 방법

엔티티에 @NamedQuery 애노테이션을 붙여줘야한다. name값을 설정해주고, JPQL을 사용해 쿼리를 적어준다.(@NamedNativeQuery()를 사용하면 native query를 적어주면 된다.)

repository에 선언해주면 된다. repository의 엔티티 뒤에 메서드명을 붙여서 찾아준다.
Ex. Post.findByTitle

@Query

위 방법(@NamedQuery)은 코드가 지저분해 질 수 있으므로, repository에 @Query 메서드를 사용하여 지정해주는 것이 더 깔끔하다.

nativeQuery를 쓰고 싶으면 @Query 내부에 nativeQuery = true를 설정해주면된다.

Named Parameter를 사용할 수 도 있다.

SpEL을 사용하여 entity이름을 따로 적어주지 않을 수도 있다.

Sort

@Query를 사용했을 때, Sort를 하고 싶으면, Sort를 넘겨주면 된다.

이때 Sort(정렬 옵션)에 들어갈 수 있는 문자열은 반드시 property거나 alias여야 한다.

아래와 같이 title은 Post 엔티티의 property이므로 사용가능하다.

Ex. Sort.by(LENGTH(title)) 같은 함수는 사용할 수 없다.

만약 함수를 사용하고 싶을 때는 JpaSort를 사용하면 된다.

0개의 댓글