Spring 返回页面<;对象>;查询中的DSL
我正在使用查询DSL,希望结果集返回一个页面对象。在查询DSL中有这样做的方法吗?如果是这样,我的问题会是什么样子? 我正在使用JPAQuery,我有我的QClass 方法结构如下所示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
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);
}