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 |