PageableExecutionUtils.getPage()로 최적화
@Override
public Page<MemberTeamDto> searchComplex(MemberSearchCondition condition, Pageable pageable) {
List<MemberTeamDto> content = queryFactory
.select(new QMemberTeamDto(
member.id,
member.username, member.age,
team.id,
team.name))
.from(member)
.leftJoin(member.team, team)
.where(usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageGoe(condition.getAgeGoe()),
ageLoe(condition.getAgeLoe()))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
JPAQuery<Member> countQuery = queryFactory
.select(member)
.from(member)
.leftJoin(member.team, team)
.where(usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageGoe(condition.getAgeGoe()),
ageLoe(condition.getAgeLoe()));
return PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount());
// return new PageImpl<>(content, pageable, total);
}
스프링 데이터 라이브러리가 제공
count 쿼리가 생략 가능한 경우 생략해서 처리
페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때
마지막 페이지 일 때 (offset + 컨텐츠 사이즈를 더해서 전체 사이즈 구함)
출처 : 김영한 JPA 스프링 데이터 강의
'Querydsl' 카테고리의 다른 글
스프링 데이터 JPA가 제공하는 Querydsl 기능 (0) | 2022.07.28 |
---|---|
스프링 데이터 페이징 활용3 - 컨트롤러 개발 (0) | 2022.07.27 |
스프링 데이터 페이징 활용1 - Querydsl 페이징 연동 (0) | 2022.07.26 |
사용자 정의 리포지토리 (0) | 2022.07.26 |
실무 활용 - 스프링 데이터 JPA와 Querydsl (0) | 2022.07.26 |