Spring Data JPA 复杂/多条件组合分页查询
作者:王晓东1号 时间:2021-09-06 02:57:55
话不多说,请看代码:
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;
}
来源:http://www.cnblogs.com/Donnnnnn/p/5857229.html
标签:spring,data,jpa
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
jvm虚拟机类加载机制详解
2021-10-21 08:33:28
![](https://img.aspxhome.com/file/2023/7/76497_0s.jpg)
Java Jedis NOAUTH Authentication required问题解决方法
2023-08-19 14:09:47
![](https://img.aspxhome.com/file/2023/6/69876_0s.png)
Java数据结构之优先级队列(堆)图文详解
2021-06-25 13:47:58
![](https://img.aspxhome.com/file/2023/2/68022_0s.png)
详解Spring中的FactoryBean
2022-06-08 05:29:55
解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题
2023-10-22 15:28:19
![](https://img.aspxhome.com/file/2023/1/60841_0s.png)
MyBatis SpringMVC整合实现步骤详解
2023-02-02 20:33:07
详解SpringMVC验证框架Validation特殊用法
2023-06-08 22:23:29
Java使用fill()数组填充的实现
2022-02-06 15:03:33
spring boot ${}占位符不起作用的解决方案
2022-06-28 20:49:29
![](https://img.aspxhome.com/file/2023/0/70580_0s.png)
C# WPF数据绑定模板化操作的完整步骤
2023-05-20 15:44:50
java文件操作工具类分享(file文件工具类)
2023-11-24 22:32:47
Java Web项目中解决中文乱码方法总结(三种最新方法)
2023-07-18 18:13:22
![](https://img.aspxhome.com/file/2023/7/65337_0s.png)
Java语言实现二叉堆的打印代码分享
2021-11-27 23:00:15
![](https://img.aspxhome.com/file/2023/8/64008_0s.jpg)
Java 8 Function函数式接口及函数式接口实例
2022-04-13 14:55:05
npoi2.0将datatable对象转换为excel2007示例
2021-07-15 12:47:30
JAVA实现的CrazyArcade泡泡堂游戏
2022-12-25 11:55:23
![](https://img.aspxhome.com/file/2023/6/63156_0s.png)
Mybatis如何获取最新插入数据的id
2023-02-26 08:15:20
使用Spring开启注解AOP的支持放置的位置
2022-08-16 19:16:33
Java多线程synchronized同步方法详解
2023-06-30 00:39:42
![](https://img.aspxhome.com/file/2023/6/81226_0s.png)
Java实现邮件找回密码功能
2022-08-18 07:12:57