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


相关推荐: nodejs redis 发布订阅机制封装实现方法及实例代码  深入理解Android中的xmlns:tools属性  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel API资源类怎么用_Laravel API Resource数据转换  JS碰撞运动实现方法详解  EditPlus中的正则表达式 实战(2)  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  黑客如何通过漏洞一步步攻陷网站服务器?  Swift中switch语句区间和元组模式匹配  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  历史网站制作软件,华为如何找回被删除的网站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  深圳网站制作的公司有哪些,dido官方网站?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何用PHP快速搭建高效网站?分步指南  高防服务器租用如何选择配置与防御等级?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  C语言设计一个闪闪的圣诞树  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  简单实现Android文件上传  网站制作报价单模板图片,小松挖机官方网站报价?  如何用花生壳三步快速搭建专属网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  在线制作视频网站免费,都有哪些好的动漫网站?  Python自动化办公教程_ExcelWordPDF批量处理案例  如何在IIS中新建站点并配置端口与IP地址?  如何快速搭建高效服务器建站系统?  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  动图在线制作网站有哪些,滑动动图图集怎么做?  如何在橙子建站上传落地页?操作指南详解  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何为API生成Swagger或OpenAPI文档  Python数据仓库与ETL构建实战_Airflow调度流程详解  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel如何优化应用性能?(缓存和优化命令)  如何快速完成中国万网建站详细流程?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  微信推文制作网站有哪些,怎么做微信推文,急?  浅析上传头像示例及其注意事项  韩国服务器如何优化跨境访问实现高效连接?