您的位置:首页 > 编程语言 > Java开发

Spring Data JPA 复杂/多条件组合分页查询

2016-09-09 16:44 603 查看
推荐视频:
http://www.icoolxue.com/album/show/358
publicMap<String,Object>getWeeklyBySearch(finalMap<String,String>serArgs,
StringpageNum,StringpageSize)throwsException{
//TODOAuto-generatedmethodstub
Map<String,Object>resultMap=newHashMap<String,Object>();
//判断分页条件
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<Weekly>StuPage=proWeeklyDao.findAll(newSpecification<Weekly>(){
publicPredicatetoPredicate(Root<Weekly>root,CriteriaQuery<?>query,CriteriaBuildercb){
List<Predicate>lstPredicates=newArrayList<Predicate>();
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中。
*/
publicstaticMap<String,Object>getPageMap(Page<?>objPage){
Map<String,Object>resultMap=newHashMap<String,Object>();

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: