Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 返回页面<;对象>;查询中的DSL_Spring_Querydsl - Fatal编程技术网

Spring 返回页面<;对象>;查询中的DSL

Spring 返回页面<;对象>;查询中的DSL,spring,querydsl,Spring,Querydsl,我正在使用查询DSL,希望结果集返回一个页面对象。在查询DSL中有这样做的方法吗?如果是这样,我的问题会是什么样子? 我正在使用JPAQuery,我有我的QClass 方法结构如下所示 public Page<Object> searchPerson(String name,String phone){ Page<Object> results=null; JPQLQuery query = new JPAQuery(entityManager); QPerson

我正在使用查询DSL,希望结果集返回一个页面对象。在查询DSL中有这样做的方法吗?如果是这样,我的问题会是什么样子? 我正在使用JPAQuery,我有我的QClass

方法结构如下所示

public Page<Object> searchPerson(String name,String phone){
 Page<Object> results=null;
 JPQLQuery query = new JPAQuery(entityManager);
 QPerson person = QPerson.person;
   //I am assuming my query would go here 
  results = query.from(person). ?????  


return results;} 
公共页面搜索人(字符串名称、字符串电话){
页面结果=空;
JPQLQuery query=新的JPAQuery(entityManager);
QPerson-person=QPerson.person;
//我想我的问题会转到这里
结果=查询。来自(个人)?????
返回结果;}

救命啊

下面是我用QueryDSL实现的
分页
PageRequest
定义了我们查询的参数(限制和页面):

公共类页面请求{
受保护的长页=1l;//1是第一页
受保护整数限制=10;
公共页面请求(长页面,整数限制){
这个极限=极限;
this.page=page;
}
公共长getPage(){
返回页面;
}
公共整数getLimit(){
退货限额;
}
公共长getOffset(){
退货(第1l页)*限额;
}
}
页面
类包含查询的结果(这里是属性
对象
),并且可以实现创建良好分页链接的方法

public类页面扩展了PageRequest{
受保护的收集对象;
私人长期总计数;
私有长页面计数;
私有布尔hasPageLinkPrev;
私有布尔hasPageLinkNext;
私人收藏网页链接;
公共页(长页、整数限制、长totalCount、集合对象){
this.page=page;
这个极限=极限;
this.totalCount=totalCount;
this.objects=对象;
this.pageCount=总计数/限制;
如果(总数百分比限制>0){
this.pageCount=this.pageCount+1;
}
this.hasPageLinkPrev=页面>1;
this.hasPageLinkNext=page3l){
此.pageLinks.add(-1l);
}
如果(页面>2l){
if(page.equals(this.pageCount)和&this.pageCount>3l){
此.pageLinks.add(第2l页);
}
此.pageLinks.add(第1l页);
}
如果(page!=1l&&!page.equals(this.pageCount)){
this.pageLinks.add(第页);
}
如果(页码3l){
此.pageLinks.add(第+2l页);
}
}
如果(页码
有了这个stuf,创建查询并将结果放入页面对象并不困难。一种可能性是在存储库类的基类中编写通用方法:

protectedpage-getPage(JPQLQuery查询,PageRequest-PageRequest){
列表结果列表=查询
.offset(pageRequest.getOffset())
.limit(pageRequest.getLimit())
.fetch();
Long totalCount=query.fetchCount();
返回新页面(pageRequest、totalCount、resultList);
}
在存储库类中,您为特定用例创建查询。然后可以使用方法
getPage
页面中获取结果

公共页面搜索人(字符串名称,
字符串电话,
页面请求(请求){
页面结果=空;
JPQLQuery query=新的JPAQuery(entityManager);
QPerson-person=QPerson.person;
query=query.from(个人)
.where(人名)eq(姓名)
.及(person.phone.eq(phone);;
返回getPage(查询、请求);
} 

上述解决方案使用在上述方法上实现的BooleanBuilder,并将方法名称更改为返回Person对象。 请查收

最后实现了getPRequest方法,如下所示

public PageRequest getPRequest(Integer page, Integer pageSize) {
    return new PageRequest(page, pageSize);
}

哦,快乐的日子

@Timo Westkämper救命!页面对象属于哪种类型?您是否使用SpringDataJPA(org.springframework.Data.domain.Page?)。您可以将Spring Data的findAll方法与规范和可分页参数一起使用,也可以直接使用CriteriaBuilder。@meleagros是的,我看过那篇文章,但如果您仔细阅读了这篇文章,那么使用查询DSL的全部目的不是使用CriteriaBuilder。我只想让我的查询返回一个类似JPA的页面。在JPA中,您可以说PageFindByname(字符串名称,Pageable-Pageable);这可以返回我需要的查询名称,我想用查询DSL做同样的事情。。。。救命!!正如我所说,您可以使用findAll方法customerRepo.findAll(person.age.eq(18),newpagerequest;如果我需要指定一个实体图来避免N+1呢?
public BooleanBuilder getBuilder(String name, String phone, Integer page, Integer pageSize, String sortFlag, String sortItem) {

    QPerson person = QPerson.person;
    BooleanBuilder builder = new BooleanBuilder();
    builder.and(person.name.startsWith(name));
    return builder;
}
public PageRequest getPRequest(Integer page, Integer pageSize) {
    return new PageRequest(page, pageSize);
}