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; }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!