-
[Spring] querydsl - pagingSpring 2022. 1. 3. 22:45
querydsl 5.0.0버전부터는 fetchResults()와 fetchCount()메소드가 deprecated됬기 때문에 다른방법이 필요하다.
Pageable 인터페이스와 PageImpl을 이용하면 비교적 쉽게 페이징할 수 있다.
@Override public Page<MemberTeamDto> searchPageSimple(MemberSearchCondition condition, Pageable pageable) { List<MemberTeamDto> content = jpaQueryFactory .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 = jpaQueryFactory .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.fetch().size()); }
PageableExecutionUtils.getPage을 쓰면 장점이 있다.
첫페이지면서 전체 페이지의 사이즈가 콘텐츠의 사이즈가 크거나
마지막 페이지일 때 (offset + 컨텐츠사이즈를 더해서 전체사이즈 구한다.) 카운트쿼리를 생략할 수 잇을때 생략할 수 있게 해준다.
'Spring' 카테고리의 다른 글
[Spring] AssertJ 정리 (0) 2022.01.04 [Spring] querydsl - join (0) 2022.01.03 [Spring] @RequestParam 와 @PathVariable (0) 2022.01.03 [Spring] querydsl - 집합 (0) 2022.01.03 [Spring] querydsl - 정렬 (0) 2022.01.03