[Spring] QueryMethod

WOOK JONG KIM·2022년 11월 18일
0

패캠_java&Spring

목록 보기
52/103
post-thumbnail

find,read,get,query,search,stream은 조회
-> < T > 타입을 반환

First1, Top1 같은 것은 조건 중 상위 한개값 리턴
-> 2로 할시 상위 2개, limit query 추가되는 것을 볼 수 있음

List<User> findFirst2ByName(String name);
List<User> findTop2ByName(String name);

Last1으로 하였을 땐 findByName과 같게 동작
-> 인식되지 않는 키워드는 무시

After,Before는 보통 날짜, 시간 비교에 사용
-> userRepository.findByAfter(4L)처럼 숫자 비교에도 사용 가능

Greater than, GreaterThenEquals 는 숫자 및 날짜 시간 비교에 사용

Between

List<User> findByCreatedAtBetween(LocalDateTime yesterday, LocalDateTime tomorrow);

List<User> findByIdBetween(Long id1, Long id2);

Between은 양 끝에 값을 포함 시킴
-> Before,After은 포함 X
-> FindByIdGreaterThanEqualsAndLessThanEqual 과 같은 의미

쿼리의 오류는 잡아 주지 못하니까 쿼리를 로그로 출력하여 확인잘하자!

Empty는 Collection 타입의 not Empty

In,NotIn

List<User> findByNameIn(List<String> names);

// 보통은 배열을 만들어 넣기보다는 다른 쿼리에 결과를 잡아넣음
// 어느 사이즈의 결과가 들어갈지 검증하는 것도 중요
System.out.println("findByNameIn: " + userRepository.findByNameIn(Lists.newArrayList("martin", "dennis")));

StartingWith, EndingWith는 보통 문자열에 사용

List<User> findByNameStartingWith(String name);

List<User> findByNameEndingWith(String name);

List<User> findByNameContains(String name);

List<User> findByNameLike(String name);

contains 는 양방향 Like -> %art%

StartingWith -> mar%
EndingWith -> %tin


QueryMethod를 통한 정렬과 페이징

정렬

List<User> findTop1ByNameOrderByIdDesc(String name);

아이디 역순 중 첫번째 값

오름차순은 : Asc

List<User> findFirstByNameOrderByIdDescEmailAsc(String name);

Sort 이용

List<User> findFirstByName(String name, Sort sort);

System.out.println("findFirstByNameWithSortParams: " 
+ userRepository.findFirstByName("martin", Sort.by(Sort.Order.desc("id"), 
Sort.Order.asc("email"))));

페이징

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {


	Iterable<T> findAll(Sort sort);

	Page<T> findAll(Pageable pageable);
}
Page<User> findByName(String name, Pageable pageable);
 System.out.println("findByNameWithPaging" + 
 userRepository.findByName("martin", 
 PageRequest.of(0,1, Sort.by(Sort.Order.desc("id"))))
 .getContent());
profile
Journey for Backend Developer

0개의 댓글