首页 > 开发 > Java > 正文

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

2024-07-13 10:06:11
字体:
来源:转载
供稿:网友

话不多说,请看代码:

public Map<String, Object> getWeeklyBySearch(final Map<String, String> serArgs,      String pageNum, String pageSize) throws Exception {    // TODO Auto-generated method stub    Map<String,Object> resultMap=new HashMap<String, Object>();    // 判断分页条件    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<Weekly> StuPage = proWeeklyDao.findAll(new Specification<Weekly>() {      public Predicate toPredicate(Root<Weekly> root, CriteriaQuery<?> query, CriteriaBuilder cb) {        List<Predicate> lstPredicates = new ArrayList<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 = 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<String, Object> getPageMap(Page<?> objPage) {    Map<String, Object> resultMap = new HashMap<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()); // 每页显示数量    return resultMap;  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持VeVb武林网!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表