使用SpringDataJPA如何实现多条件的分页查询

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

河口ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

话不多说,请看代码:

public Map getWeeklyBySearch(final Map serArgs,
      String pageNum, String pageSize) throws Exception {
    // TODO Auto-generated method stub
    Map resultMap=new HashMap();
    // 判断分页条件
    pageNum = TextUtils.isNotBlank(pageNum) ? pageNum : "1";
    pageSize = TextUtils.isNotBlank(pageSize) ? pageSize : "10";
    // 分页时的总页数、每页条数、排序方式、排序字段
    Pageable StuPageable = PageUtils.buildPageRequest(Integer.valueOf(pageNum),Integer.valueOf(pageSize), new Sort(Direction.DESC, new String[] { "xmzbsj","lstProinfo.proId"}));
    // 按照条件进行分页查询,根据StuPageable的分页方式
     Page StuPage = proWeeklyDao.findAll(new Specification() {
      public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        List lstPredicates = new ArrayList();
        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 = new Predicate[lstPredicates.size()];
        return cb.and(lstPredicates.toArray(arrayPredicates));
      }
    }, StuPageable);
     // 按照条件进行分页查询
    resultMap = PageUtils.getPageMap(StuPage);
    return resultMap;
  }

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

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;

* @param pageNum 当前页
   * @param pageSize 每页条数
   * @param sortType 排序字段
   * @param direction 排序方向
   */
  public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType, String direction) {
    Sort sort = null;

    if (!TextUtils.isNotBlank(sortType)) {
      return new PageRequest(pageNum - 1, pageSize);
    } else if (TextUtils.isNotBlank(direction)) {
      if (Direction.ASC.equals(direction)) {
        sort = new Sort(Direction.ASC, sortType);
      } else {
        sort = new Sort(Direction.DESC, sortType);
      }
      return new PageRequest(pageNum - 1, pageSize, sort);
    } else {
      sort = new Sort(Direction.ASC, sortType);
      return new PageRequest(pageNum - 1, pageSize, sort);
    }
  }
   public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType) {
     return buildPageRequest(pageNum, pageSize, sortType, null);
   }

getPageMap()方法:

JPA的Page也是集合,获取Page集合里的值,最后获取到的这些(key,value)

/**
   * 封装分页数据到Map中。
   */
  public static Map getPageMap(Page<?> objPage) {
    Map resultMap = new HashMap();
    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()); // 每页显示数量
    return resultMap;
  }

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


分享文章:使用SpringDataJPA如何实现多条件的分页查询
浏览地址:http://myzitong.com/article/ghijje.html