Java 使用JPQL和布尔表达式分页

Java 使用JPQL和布尔表达式分页,java,rest,pagination,jpql,querydsl,Java,Rest,Pagination,Jpql,Querydsl,我不熟悉分页,我想为我的JPQL查询分页,但我不能这样做,请查找以下类: 服务: public List<Company> getCompanies(BooleanExpression predicate, Pageable pageRequest){ return companyRepositoryImpl.getCompany(predicate, pageRequest); } public List getcompanys(布尔表达式谓词,可分页的分页请求){ re

我不熟悉分页,我想为我的JPQL查询分页,但我不能这样做,请查找以下类:

服务:

public List<Company> getCompanies(BooleanExpression predicate, Pageable pageRequest){
    return companyRepositoryImpl.getCompany(predicate, pageRequest);
}
public List getcompanys(布尔表达式谓词,可分页的分页请求){
return companyRepositoryImpl.getCompany(谓词,pageRequest);
}
存储库: @存储库 公共类公司repositoryimpl{

@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;

}
@PersistenceContext
私人实体管理者实体管理者;
public List getCompany(Boolean Expression finalExpression、Pageable pageRequest){
int pageNumber=pageRequest.getPageNumber();
int pageSize=pageRequest.getPageSize();
long pageOffset=pageRequest.getOffset();
Sort-sortValue=pageRequest.getSort();
//字符串str=sortValue.toString();
QCompany comp=QCompany.company;
QCompanyAddress QCompanyAddress=QCompanyAddress.companyAddress;
最终JPQLQuery JPQLQuery=新的JPAQuery(entityManager);
OrderSpecifier o=qCompanyAddress.addressLine1.desc();
JPQLQuery query=JPQLQuery.from(comp).leftJoin(qCompanyAddress)
.on(公司id.eq(qCompanyAddress.company.id)
和(qCompanyAddress.statusActiveSwitch.eq(SwitchEnum.Y))
和(qCompanyAddress.addressType.addressTypeCode.eq(“1”))
其中(最终压力)。订购人(o)。限额(20);
QueryResults fetchResults=query.fetchResults();
List results=fetchResults.getResults();
fetchResults.getTotal();
返回(列表)结果;
}

在存储库中,我有可分页对象,但我不知道如何将其与JPQL一起使用。非常感谢您的帮助。

要按照定义的可分页对象加载数据,您必须从
查询定义中删除
限制(20)
。然后,您可以执行以下操作:

List<Company> companies = getQuerydsl()
            .applyPagination(pageable, query)
            .fetch();
List companys=getQuerydsl()
.applyPagination(可分页,查询)
.fetch();
您可以返回列表

如果您想返回页面而不是列表,那么您必须进行如下更改-

long total = query.fetchCount();
List<Company> companies = getQuerydsl()
            .applyPagination(pageable, query)
            .fetch();
return new PageImpl<>(companies, pageable, total);
long total=query.fetchCount();
上市公司=getQuerydsl()
.applyPagination(可分页,查询)
.fetch();
返回新的PageImpl(公司、可分页、总计);

我希望,这将对您有所帮助。

要按照定义的
可分页对象加载数据,您必须从
查询
定义中删除
限制(20)
。然后,您可以执行以下操作:

List<Company> companies = getQuerydsl()
            .applyPagination(pageable, query)
            .fetch();
List companys=getQuerydsl()
.applyPagination(可分页,查询)
.fetch();
您可以返回列表

如果您想返回页面而不是列表,那么您必须进行如下更改-

long total = query.fetchCount();
List<Company> companies = getQuerydsl()
            .applyPagination(pageable, query)
            .fetch();
return new PageImpl<>(companies, pageable, total);
long total=query.fetchCount();
上市公司=getQuerydsl()
.applyPagination(可分页,查询)
.fetch();
返回新的PageImpl(公司、可分页、总计);
我希望,这会对你有所帮助