QueryDSL

페이징과 정렬(feat.queryDSL)

쿠카이든 2022. 6. 17. 13:03
728x90
QItem item = QItem.item;

query.from(item)
    .where(item.price.gt(20000)
    .orderBy(item.price.desc(), item.stockQuantity.asc())
    .offset(10).limit(20)
    .list(item);
  • 정렬은 orderBy를 사용하는데 쿼리 타입(Q)이 제공하는 asc(), desc()를 사용한다. 페이징은 offset과 limit을 적절히 조합해서 사용하면 된다.
  • 실제 페이징 처리를 하려면 검색된 전체 데이터 수를 알아야 한다. 이때는 list() 대신에 아래 예제와 같이 listResults()를 사용한다.
SearchResults<Item> result = 
    query.from(item)
        .where(item.price.gt(10000))
        .offset(10).limit(20)
        .listResults(item);
        
long total = result.getTotal();  //검색된 전체 데이터 수
long limit = result.getLimit();
long offset = result.getOffset();
List<Item> results = result.getResults();  //조회된 데이터
  • listResults()를 사용하면 전체 데이터 조회를 위한 count 쿼리를 한 번 더 실행한다. 
  • 그리고 SearchResults를 반환하는데 이 객체에서 전체 데이터 수를 조회할 수 있다.

 

출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 : 김영한)

728x90

'QueryDSL' 카테고리의 다른 글

(QueryDSL) 동적쿼리(feat. BooleanBuilder)  (0) 2022.06.18
(JPA)프로젝션 feat.QueryDSL..  (0) 2022.06.18
QueryDsl 조인 종류  (0) 2022.06.17
검색 조건 쿼리(feat. QueryDSL)  (0) 2022.06.17
기본 Q 생성  (0) 2022.06.17