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
0
投稿

猜你喜欢

  • jvm虚拟机类加载机制详解

    2021-10-21 08:33:28
  • Java Jedis NOAUTH Authentication required问题解决方法

    2023-08-19 14:09:47
  • Java数据结构之优先级队列(堆)图文详解

    2021-06-25 13:47:58
  • 详解Spring中的FactoryBean

    2022-06-08 05:29:55
  • 解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

    2023-10-22 15:28:19
  • 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
  • C# WPF数据绑定模板化操作的完整步骤

    2023-05-20 15:44:50
  • java文件操作工具类分享(file文件工具类)

    2023-11-24 22:32:47
  • Java Web项目中解决中文乱码方法总结(三种最新方法)

    2023-07-18 18:13:22
  • Java语言实现二叉堆的打印代码分享

    2021-11-27 23:00:15
  • 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
  • Mybatis如何获取最新插入数据的id

    2023-02-26 08:15:20
  • 使用Spring开启注解AOP的支持放置的位置

    2022-08-16 19:16:33
  • Java多线程synchronized同步方法详解

    2023-06-30 00:39:42
  • Java实现邮件找回密码功能

    2022-08-18 07:12:57
  • asp之家 软件编程 m.aspxhome.com