Spring Data JPA 复杂/多条件组合分页查询
话不多说,请看代码:
publicMapgetWeeklyBySearch(finalMap serArgs, StringpageNum,StringpageSize)throwsException{ //TODOAuto-generatedmethodstub Map resultMap=newHashMap (); //判断分页条件 pageNum=TextUtils.isNotBlank(pageNum)?pageNum:"1"; pageSize=TextUtils.isNotBlank(pageSize)?pageSize:"10"; //分页时的总页数、每页条数、排序方式、排序字段 PageableStuPageable=PageUtils.buildPageRequest(Integer.valueOf(pageNum),Integer.valueOf(pageSize),newSort(Direction.DESC,newString[]{"xmzbsj","lstProinfo.proId"})); //按照条件进行分页查询,根据StuPageable的分页方式 Page StuPage=proWeeklyDao.findAll(newSpecification (){ publicPredicatetoPredicate(Root root,CriteriaQuery>query,CriteriaBuildercb){ List lstPredicates=newArrayList (); if(TextUtils.isNotBlank(serArgs.get("xmmc"))){ lstPredicates.add(cb.like(root.get("lstProinfo").get("xmmc").as(String.class),"%"+serArgs.get("xmmc")+"%")); } if(TextUtils.isNotBlank(serArgs.get("xmzbqssj"))){ lstPredicates.add(cb.greaterThanOrEqualTo(root.get("xmzbsj").as(String.class),serArgs.get("xmzbqssj"))); } if(TextUtils.isNotBlank(serArgs.get("xmzbjzsj"))){ lstPredicates.add(cb.lessThanOrEqualTo(root.get("xmzbsj").as(String.class),serArgs.get("xmzbjzsj"))); } Predicate[]arrayPredicates=newPredicate[lstPredicates.size()]; returncb.and(lstPredicates.toArray(arrayPredicates)); } },StuPageable); //按照条件进行分页查询 resultMap=PageUtils.getPageMap(StuPage); returnresultMap; }
buildPageRequest()方法,导入的包,下面是自己写的方法
importorg.springframework.data.domain.Page;
importorg.springframework.data.domain.PageRequest;
importorg.springframework.data.domain.Sort;
importorg.springframework.data.domain.Sort.Direction;
*@parampageNum当前页
*@parampageSize每页条数
*@paramsortType排序字段
*@paramdirection排序方向
*/
publicstaticPageRequestbuildPageRequest(intpageNum,intpageSize,StringsortType,Stringdirection){
Sortsort=null;
if(!TextUtils.isNotBlank(sortType)){
returnnewPageRequest(pageNum-1,pageSize);
}elseif(TextUtils.isNotBlank(direction)){
if(Direction.ASC.equals(direction)){
sort=newSort(Direction.ASC,sortType);
}else{
sort=newSort(Direction.DESC,sortType);
}
returnnewPageRequest(pageNum-1,pageSize,sort);
}else{
sort=newSort(Direction.ASC,sortType);
returnnewPageRequest(pageNum-1,pageSize,sort);
}
}
publicstaticPageRequestbuildPageRequest(intpageNum,intpageSize,StringsortType){
returnbuildPageRequest(pageNum,pageSize,sortType,null);
}
getPageMap()方法:
JPA的Page也是集合,获取Page集合里的值,最后获取到的这些(key,value)
/** *封装分页数据到Map中。 */ publicstaticMapgetPageMap(Page>objPage){ Map resultMap=newHashMap (); resultMap.put(Constants.PAGE_RESULT_LIST,objPage.getContent());//数据集合,符合查询条件的所有记录数据 resultMap.put(Constants.PAGE_TOTAL_NUM,objPage.getTotalElements());//总记录数 resultMap.put(Constants.PAGE_TOTAL_PAGE,objPage.getTotalPages());//总页数 resultMap.put(Constants.PAGE_NUM,objPage.getNumber());//当前页码 resultMap.put(Constants.PAGE_SIZE,objPage.getSize());//每页显示数量 returnresultMap; }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!