zoukankan      html  css  js  c++  java
  • Spring Data JPA 复杂/多条件组合分页查询

    推荐视频:

    http://www.icoolxue.com/album/show/358

        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;
        }
  • 相关阅读:
    P2073 送花(Treap维护双权值)
    P2041 [NOI2005]维护数列(Splay树支持插入区间、删除区间、修改区间、翻转区间、区间求和、区间带修改最大子列和的代码模板)
    P1801 黑匣子(Treap树)
    P3377 【模板】左偏树(可并堆)
    P1553 可怜的狗狗(可持久化线段树)
    P1503 鬼子进村(Treap树)
    Adobe CC 2017 全系列官方中文版32/64位
    Serverless简介
    小程序开发框架MPVue和uni-app
    ORM对象关系映射
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/5857229.html
Copyright © 2011-2022 走看看