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如何优化应用性能?(缓存和优化命令)
如何快速完成中国万网建站详细流程?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
微信推文制作网站有哪些,怎么做微信推文,急?
浅析上传头像示例及其注意事项
韩国服务器如何优化跨境访问实现高效连接?

