QueryDSL

페이징 (feat.QueryDSL)

쿠카이든 2022. 6. 25. 07:39
728x90
조회 건수 제한
@Test
public void paging1() {
    List<Member> result = queryFactory
        .selectFrom(member)
        .orderBy(member.username.desc())
        .offset(1) //0부터 시작(zero index)
        .limit(2) //최대 2건 조회
        .fetch();
    assertThat(result.size()).isEqualTo(2);
}
전체 조회 수가 필요하면?
@Test
public void paging2() {
    QueryResults<Member> queryResults = queryFactory
        .selectFrom(member)
        .orderBy(member.username.desc())
        .offset(1)
        .limit(2)
        .fetchResults();
    assertThat(queryResults.getTotal()).isEqualTo(4);
    assertThat(queryResults.getLimit()).isEqualTo(2);
    assertThat(queryResults.getOffset()).isEqualTo(1);
    assertThat(queryResults.getResults().size()).isEqualTo(2);
}

> 주의: count 쿼리가 실행되니 성능상 주의!

> 참고: 실무에서 페이징 쿼리를 작성할 때, 데이터를 조회하는 쿼리는 여러 테이블을 조인해야 하지만, count 쿼리는 조인이 필요 없는 경우도 있다. 그런데 이렇게 자동화된 count 쿼리는 원본 쿼리와 같이 모두 조인을 해버리기 때문에 성능이 안나올 수 있다. count 쿼리에 조인이 필요없는 성능 최적화가 필요하다면, count 전용 쿼리를 별도로 작성해야 한다.

 

출처 : 인프런 실전! Querydsl 강의 (강사: 김영한)

728x90

'QueryDSL' 카테고리의 다른 글

queryDsl로 like 문 구현  (0) 2022.09.19
QueryDSL 페이징 방법  (0) 2022.07.16
동적 쿼리 - BooleanBuilder 사용  (0) 2022.06.25
(QueryDSL) 동적쿼리(feat. BooleanBuilder)  (0) 2022.06.18
(JPA)프로젝션 feat.QueryDSL..  (0) 2022.06.18