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

发布时间 - 2026-01-11 00:33:04    点击率:

话不多说,请看代码:

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;
  }

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


# spring  # data  # jpa  # 分页  # 分页查询  # 复杂查询  # JPA多条件复杂SQL动态分页查询功能  # SpringJPA 做分页条件查询的代码实践  # Spring Data JPA结合Mybatis进行分页查询的实现  # JPA框架实现分页查询和条件查询功能详解  # SpringBoot集成Jpa对数据进行排序、分页、条件查询和过滤操作  # JPA实现多条件分页查询  # 每页  # 条数  # 多说  # 当前页  # StuPageable  # Pageable  # PageUtils  # buildPageRequest  # TextUtils  # valueOf  # isNotBlank  # Integer  # Weekly  # Page  # proId  # findAll  # proWeeklyDao  # StuPage  # Direction 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 长沙企业网站制作哪家好,长沙水业集团官方网站?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何在VPS电脑上快速搭建网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  如何用景安虚拟主机手机版绑定域名建站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Firefox Developer Edition开发者版本入口  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何快速登录WAP自助建站平台?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  浅述节点的创建及常见功能的实现  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何快速搭建FTP站点实现文件共享?  JS弹性运动实现方法分析  Laravel怎么上传文件_Laravel图片上传及存储配置  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何快速使用云服务器搭建个人网站?  如何为不同团队 ID 动态生成多个独立按钮  Laravel如何使用.env文件管理环境变量?(最佳实践)  微信小程序 canvas开发实例及注意事项  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何在IIS服务器上快速部署高效网站?  如何用PHP快速搭建CMS系统?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel如何记录自定义日志?(Log频道配置)  无锡营销型网站制作公司,无锡网选车牌流程?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何实现建站之星域名转发设置?  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  JS碰撞运动实现方法详解  javascript基于原型链的继承及call和apply函数用法分析  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何在局域网内绑定自建网站域名?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  java ZXing生成二维码及条码实例分享  C#如何调用原生C++ COM对象详解  Laravel如何为API生成Swagger或OpenAPI文档  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?