[JPA]쿼리 만들기

윤재열·2022년 5월 12일
0

JPA

목록 보기
13/21
post-custom-banner

스프링 데이터 저장소의 메서드 이름으로 쿼리 만드는 방법

  • 메서드 이름을 분석해서 쿼리 만들기 (CREATE)
  • 미리 정의해 둔 쿼리 찾아 사용하기(USE_DECLARED_QUERY)
  • 미리 정의한 쿼리 찾아보고 없으면 만들기(CREATE_IF_NOT_FOUND)

쿼리 만드는 방법

  • 리턴타입{접두어}{도입부}By{프로퍼티 표현식}(조건식)[(And|Or){프로퍼티 표현식}(조건식)]{정렬조건}(매개변수)
접두어Find,Get,Query,Count...
도입부Distinct, First(N), Top(N)
프로퍼티 표현식Person.Address.ZipCode -> find(Person)ByAddress_ZipCode(..)
조건식IgnoreCase,Between,LessThan,GreaterThan,Like,Contains,....
정렬 조건OrderBy{프로퍼티}Asc or Desc
리턴 타입E,Optional,List,Page,Slice,Stream
매개변수Pageable,Sort

쿼리 찾는 방법

  • 메서드 이름으로 쿼리를 표현하기 힘든 경우에 사용
  • 저장소 기술에 따라 다릅니다.
  • JPA : @Query,@NamedQuery
public interface CommentRepository extends JpaRepository<Comment,Long>{
  
  List<Comment> findByCommentContains(String keyword);
  
  Page<Comment> findByLikeGreateThanAndPost(int likeCount, Post post, Pageable pageable);

쿼리 만들어 보기

  • 기본 예제
List<Person> findByEmailAddressAndLastName(EmailAddress emailAddress, String lastname);
  
  //distinct
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  
  //ignorecase
List<Person> findByLastnameIgnoreCase(String lastname);
  
  • 정렬
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
  • 페이징
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Sort sort);
List<User> findByLastname(String lastname, Pageable pageable);  
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글