使用弹簧数据JPA如何实现多条件的分页查询

  介绍

使用弹簧数据JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>话不多说,请看代码:

公共Map<字符串,Object>String> getWeeklyBySearch(最终Map<字符串;serArgs,
  字符串pageNum,字符串pageSize)抛出异常{//TODO自动生成方法存根
  Object> Map<字符串;resultMap=new HashMap<字符串,Object> ();//判断分页条件
  pageNum=TextUtils.isNotBlank (pageNum), # 63;pageNum:“1“;;
  页大?TextUtils.isNotBlank(页大小),# 63;页大小:“10“;;//分页时的总页数,每页条数,排序方式,排序字段
  可分页StuPageable=PageUtils.buildPageRequest (Integer.valueOf (pageNum) Integer.valueOf(页大小),新型(方向。DESC、新String [] {“xmzbsj",“lstProinfo.proId"}));//按照条件进行分页查询,根据StuPageable的分页方式
  PageStuPage=proWeeklyDao。findAll(新的Specification () {
  公共谓词toPredicate (Root根,CriteriaQuery<及# 63;比;查询,querybuilder cb) {
  ListlstPredicates=new ArrayList ();
  如果(TextUtils.isNotBlank (serArgs.get (“xmmc"))) {
  lstPredicates.add (cb.like (root.get (“lstProinfo") . get (“xmmc")。as (String.class),“%”;+ serArgs.get (“xmmc") +“%”);
  }
  如果(TextUtils.isNotBlank (serArgs.get (“xmzbqssj"))) {
  lstPredicates.add (cb.greaterThanOrEqualTo (root.get (“xmzbsj")。as (String.class) serArgs.get (“xmzbqssj")));
  }
  如果(TextUtils.isNotBlank (serArgs.get (“xmzbjzsj"))) {
  lstPredicates.add (cb.lessThanOrEqualTo (root.get (“xmzbsj")。as (String.class) serArgs.get (“xmzbjzsj")));
  }
  谓词[]arrayPredicates=new谓词[lstPredicates.size ());
  返回cb.and (lstPredicates.toArray (arrayPredicates));
  }
  },StuPageable);//按照条件进行分页查询
  resultMap=PageUtils.getPageMap (StuPage);
  返回resultMap;
  }

<>强buildPageRequest()方法,导入的包,下面是自己写的方法

进口org.springframework.data.domain.Page;
  进口org.springframework.data.domain.PageRequest;
  进口org.springframework.data.domain.Sort;
  进口org.springframework.data.domain.Sort.Direction;
  
  * @param pageNum当前页
  * @param页大小每页条数
  * @param sortType排序字段
  * @param方向排序方向
  */公共静态PageRequest buildPageRequest (sortType int pageNum, int页大小,字符串,字符串方向){
  这种类型=零;
  
  如果(! TextUtils.isNotBlank (sortType)) {
  返回新PageRequest (pageNum - 1页大小);
  }else if (TextUtils.isNotBlank(方向)){
  如果(Direction.ASC.equals(方向)){=新型(方向。ASC, sortType);
  其他}{=新型(方向。DESC sortType);
  }
  返回新PageRequest (pageNum - 1页大小排序);
  其他}{=新型(方向。ASC, sortType);
  返回新PageRequest (pageNum - 1页大小排序);
  }
  }
  公共静态PageRequest buildPageRequest (int pageNum int页大小,字符串sortType) {
  页大小,返回buildPageRequest (pageNum sortType, null);
  }

<>强getPageMap()方法:

JPA的页面也是集合,获取页面集合里的值,最后获取到的这些(键值)

/* *   *封装分页数据到映射中。   */公共静态Map<字符串,Object>getPageMap (Page<及# 63;比;objPage) {   Object> Map<字符串;resultMap=new HashMap<字符串,Object> ();   resultMap.put(常量。PAGE_RESULT_LIST objPage.getContent ());//数据集合,符合查询条件的所有记录数据   resultMap.put(常量。PAGE_TOTAL_NUM objPage.getTotalElements ());//总记录数   resultMap.put(常量。PAGE_TOTAL_PAGE objPage.getTotalPages ());//总页数   resultMap.put(常量。PAGE_NUM objPage.getNumber ());//当前页码   resultMap.put(常量。页大小,objPage.getSize ());//每页显示数量   返回resultMap;   }

看完上述内容,你们掌握使用弹簧数据JPA如何实现多条件的分页查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

使用弹簧数据JPA如何实现多条件的分页查询