오봉이와 함께하는 개발 블로그
Querydsl - 스프링 데이터 페이징 활용 3 (컨트롤러 개발) 본문
728x90
스프링 데이터 페이징 활용3 - 컨트롤러 개발
실제 컨트롤러
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberJpaRepository memberJpaRepository;
private MemberRepository memberRepository;
@GetMapping("/v1/members")
public List<MemberTeamDto> searchMemberV1(MemberSearchCondition condition) {
return memberJpaRepository.search(condition);
}
@GetMapping("/v2/members")
public Page<MemberTeamDto> searchMemberV2(MemberSearchCondition condition, Pageable pageable) {
return memberRepository.searchPageSimple(condition, pageable);
}
@GetMapping("/v3/members")
public Page<MemberTeamDto> searchMemberV3(MemberSearchCondition condition, Pageable pageable) {
return memberRepository.searchPageComplex(condition, pageable);
}
}
- http://localhost:8080/v2/members?size=5&page=2
- http://localhost:8080/v3/members?size=110&page=0
- 총 데이터가 100개라서 count 쿼리가 나가지 않는 것을 볼 수 있다.
- http://localhost:8080/v3/members?size=20&page=0
- count 쿼리가 나간다.
스프링 데이터 정렬(Sort)
스프링 데이터 JPA는 자신의 정렬(Sort)을 Querydsl의 정렬(OrderSpecifier)로 편리하게 변경하는
기능을 제공한다.
스프링 데이터의 정렬을 Querydsl의 정렬로 직접 전환하는 방법은 다음 코드를 참고하자.
스프링 데이터 Sort를 Querydsl의 OrderSpecifier로 변환
JPAQuery<Member> query = queryFactory
.selectFrom(member);
for (Sort.Order o : pageable.getSort()) {
PathBuilder pathBuilder = new PathBuilder(member.getType(), member.getMetadata());
query.orderBy(new OrderSpecifier(o.isAscending() ? Order.ASC : Order.DESC,
pathBuilder.get(o.getProperty())));
}
List<Member> result = query.fetch();
정렬(
Sort
)은 조건이 조금만 복잡해져도Pageable
의Sort
기능을 사용하기 어렵다. 루트 엔티티 범위를 넘어가는(join을 하는 등) 동적 정렬 기능이 필요하면 스프링 데이터 페이징이 제공하는Sort
를 사용하기 보다는 파라미터를 받아서 직접 처리하는 것을 권장한다.
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
'BE > JPA' 카테고리의 다른 글
Querydsl - 인터페이스 지원 (QuerydslPredicateExecutor) (0) | 2022.09.20 |
---|---|
Querydsl - 스프링 데이터 페이징 활용 2 (CountQuery 최적화) (0) | 2022.09.20 |
Querydsl - 스프링 데이터 페이징 활용 1 (Querydsl 페이징 연동) (0) | 2022.09.20 |
Querydsl - 스프링 데이터 JPA 사용자 정의 리포지토리 (0) | 2022.09.20 |
Querydsl - 스프링 데이터 JPA 리포지토리로 변경 (1) | 2022.09.20 |
Comments