软件编程
位置:首页>> 软件编程>> java编程>> Spring Data JPA 复杂/多条件组合分页查询

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

作者:王晓东1号  发布时间:2021-09-06 02:57:55 

标签:spring,data,jpa

话不多说,请看代码:


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

0
投稿

猜你喜欢

  • 指定创建派生类实例时应调用的基类构造函数;调用基类上已被其他方法重写的方法。注意:不能从静态方法中使用base关键字,base关键字只能在实
  • 本文为大家分享Android自定义Spinner适配器的相关知识点,供大家参考,具体内容如下一、大致效果二.关键代码在注释中讲重点吧。 (1
  • 今天突发奇想,想做一个智能拼图游戏来给哄女友。需要实现这些功能第一图片自定义第二宫格自定义,当然我一开始就想的是3*3 4*4 5*5,没有
  • 准备学习java2游戏编程。(其实这是一本书啦)然后作为基础的基础的基础,必须学习如何让键盘与界面进行交互。下面就是对一个基础得不能再基础的
  • 一、水平分表当业务需求的数据量过大时,一个表格存储数据会非常之多,故时长采用水平分表的方式来减少每张表的数据量即是提升查询数据库时的效率。水
  • 前言最近在研究串口通讯,其中有几个比较重要的概念,RS-232这种适配于上位机和PC端进行连接,RS-232只限于PC串口和设备间点对点的通
  • 推荐idea2022最新激活教程:idea2021最新激活方法https://www.jb51.net/article/197138.htm
  • 为什么使用Kotlin项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区
  • 前言关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是Recycle
  • 本文实例讲述了C#在运行时动态创建类型的实现方法。是C#项目开发中很实用的技巧。分享给大家供大家参考。具体分析如下:具体来说,C# 在运行时
  • 本文实例为大家分享了Android简单实现文件下载的具体代码,供大家参考,具体内容如下权限<!--  文件读写权限 &nbs
  • TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链
  • 图片解析:1.生成字节码文件的过程可能产生编译时异常(checked),由字节码文件到在内存中加载、运行类此过程可能产生运行时异常(unch
  • 在Android开发中,有时候可能会要用到碎纸机的效果,今天小编为大家整理好代码,一起来看看吧。首先来看下效果图实例代码xml<com
  • 这篇文章主要介绍了springboot集成fastDfs过程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
  • 第一节 接口慨述接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语
  • 与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流。本文将简单讲解条件、循环和switch。一、块作用域块(block),即复
  • 获取map的值主要有四种方法,这四种方法又分为两类,一类是调用map.keySet()方法来获取key和value的值,另一类则是通过map
  • 1,编写一个程序,读取文件test.txt的内容并在控制台输出。如果源文件不存在,则显示相应的错误信息。 package src;impor
  • 要想使用Eclipse开发Android应用,首先要安装一个ADT插件,在此记录一下在Eclipse中采用在线安装的方式ADT插件,我使用的
手机版 软件编程 asp之家 www.aspxhome.com