스프링 데이터 저장소의 메서드 이름으로 쿼리 만드는 방법
- 메서드 이름을 분석해서 쿼리 만들기 (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);
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
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);