ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] querydsl - paging
    Spring 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 + 컨텐츠사이즈를 더해서 전체사이즈 구한다.) 카운트쿼리를 생략할 수 잇을때 생략할 수 있게 해준다.

     

    출처 : 실전! Querydsl - 인프런 | 학습 페이지 (inflearn.com)

    '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

    댓글

Designed by Tistory.