java - 使用 JPQL 和 BooleanExpression 进行分页
问题描述
我是分页新手,我想对我的 JPQL 查询进行分页,但我做不到,请查找以下类:
服务:
public List<Company> getCompanies(BooleanExpression predicate, Pageable pageRequest){
return companyRepositoryImpl.getCompany(predicate, pageRequest);
}
存储库:@Repository 公共类 CompanyRepositoryImpl{
@PersistenceContext
private EntityManager entityManager;
public <T> List<T> getCompany(BooleanExpression finalExpression, Pageable pageRequest) {
int pageNumber = pageRequest.getPageNumber();
int pageSize = pageRequest.getPageSize();
long pageOffset = pageRequest.getOffset();
Sort sortValue = pageRequest.getSort();
// String str = sortValue.toString();
QCompany comp = QCompany.company;
QCompanyAddress qCompanyAddress = QCompanyAddress.companyAddress;
final JPQLQuery<QCompany> jpqlQuery = new JPAQuery(entityManager);
OrderSpecifier<?> o = qCompanyAddress.addressLine1.desc();
JPQLQuery<QCompany> query = jpqlQuery.from(comp).leftJoin(qCompanyAddress)
.on(comp.id.eq(qCompanyAddress.company.id)
.and(qCompanyAddress.statusActiveSwitch.eq(SwitchEnum.Y))
.and(qCompanyAddress.addressType.addressTypeCode.eq("1")))
.where(finalExpression).orderBy(o).limit(20);
QueryResults<QCompany> fetchResults = query.fetchResults();
List<QCompany> results = fetchResults.getResults();
fetchResults.getTotal();
return (List<T>) results;
}
在存储库中,我有可分页对象,但我不知道如何将它与 JPQL 一起使用。任何帮助表示赞赏。
解决方案
要根据定义的pageable
对象加载数据,您必须limit(20)
从query
定义中删除。然后,您可以执行以下操作:
List<Company> companies = getQuerydsl()
.applyPagination(pageable, query)
.fetch();
您可以返回列表。
如果你想返回页面而不是列表,那么你必须改变一下 -
long total = query.fetchCount();
List<Company> companies = getQuerydsl()
.applyPagination(pageable, query)
.fetch();
return new PageImpl<>(companies, pageable, total);
我希望这能帮到您。
推荐阅读
- amazon-redshift - 随机并将种子设置为在 Redshift Alation Sql 查询中无法正常工作
- angular - Angular Universal 和 BehaviorSubject
- php - 检测是否是 PHP 上的 PWA
- flutter - Flutter:ClipPath() 小部件中的断言失败错误
- asp.net-core - OnModelCreating 代码从 EF6 重构到 EF core 3.1
- opencv - 如何估计伽马校正的最佳伽马参数?
- reactjs - 道具验证中缺少组件键值
- java - Android + RxJava + For Loop + 不执行所有请求
- android-studio - Android studio 状态栏出 pf 位置
- sql - F# SqlDataProvider,“'Main' 的类型初始化程序引发了异常。'