jpa自定义条件分页查询
主要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
这里以我最近自己瞎折腾的项目部分代码为例子(仅展示主要部分):
实体类名称(Confusion)
需要注意的是
类上+ @Entity
主键字段+ @Id
package cn.zytao.taosir.disabuse.dao; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import cn.zytao.taosir.common.model.disabuse.Confusion; public interface ConfusionRepository extends JpaRepository<Confusion,String>, JpaSpecificationExecutor<Confusion>{
}
JpaRpository这里就不多讲了,需要注意的是,同时继承JpaSpecificationExecutor
我们发现,继承该类后,可以使用相关的API
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);

注意Specification类

通过源码可以发现这个方法,关键就是重写它了
在Service层中
@SuppressWarnings({ "deprecation", "serial" })
@Override
public Page<Confusion> findByPageAndParams(Confusion params, int pageNumber, int pageSize) {
Pageable pageable = new PageRequest(pageNumber, pageSize);
Specification<Confusion> confusion=new Specification<Confusion>() {
@Override
public Predicate toPredicate(Root<Confusion> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
Path<String> theme = root.get("theme");
return criteriaBuilder.like(theme, "%"+params.getTheme()+"%");
}
};
return confusionRepository.findAll(confusion, pageable);
}
如果使用的springboot是2.0X以上的版本,new PageRequest的构造方法已经过时,推荐使用
Pageable pageable = PageRequest.of(pageNumber, pageSize);
以上仅做参考,CriteribBuilder用于构造自定义的查询条件(即条件构造器)

通过相关的方法,我们可以用集合来处理多条件的查询,例子
@Override
public JSONObject list(Integer page, Integer size, String remark,Integer method,Integer status) {
Pageable pageable = PageRequest.of(page-1, size);
Specification<Authority> authorityQuery=new Specification<Authority>() {
@Override
public Predicate toPredicate(Root<Authority> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates=new ArrayList<>();
if(remark!=null)
predicates.add(criteriaBuilder.like(root.get("remark"), "%"+remark+"%"));
if(method!=null)
predicates.add(criteriaBuilder.equal(root.get("method"), method));
if(status!=null)
predicates.add(criteriaBuilder.equal(root.get("status"), status));
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
Page<Authority> pageAuthority = authorityMapper.findAll(authorityQuery, pageable);
return ActionHelper.responseOk(pageAuthority.getContent());
}
多条件的例子
控制层
public JSONObject findByParamAndPage(@RequestBody Confusion confusion, int pageNumber, int pageSize) {
Page<Confusion> result = confusionService.findByPageAndParams(confusion, pageNumber, pageSize);
JSONObject data=new JSONObject();
data.put("content", result.getContent());
data.put("totalNums", result.getTotalElements());
data.put("totalPages",result.getTotalPages());
return ActionHelper.responseOk(data);
}
因为这里我的项目使用的是分布式的一个实现方式,所以这里不提供@RequestMapping,自行编写
下面看看在swagger2下的效果。




jpa自定义条件分页查询的更多相关文章
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源, ...
- asp.net mvc多条件+分页查询解决方案
开发环境vs2010 css:bootstrap js:jquery bootstrap paginator 原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了 ...
- 【java】spring-data-jpa 集成hibernate实现多条件分页查询
初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...
- thinkphp 带条件分页查询
thinkphp 带条件分页查询:form表单传值时候,method='get'. 用 get 传值
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- JPA实现复杂条件分页查询
相信熟悉Hibernate的人对于ORM给编程带来的便利于快捷一定不陌生,相对于MyBatis等需要编写复杂的SQL语句,ORM映射为我们带来的便利显而易见.但是,在获得便利的同时,失去的便是灵活性, ...
- spring boot jpa 多条件组合查询带分页的案例
spring data jpa 是一个封装了hebernate的dao框架,用于单表操作特别的方便,当然也支持多表,只不过要写sql.对于单表操作,jpake可以通过各种api进行搞定,下面是一个对一 ...
- JPA分页查询与条件分页查询
情有独钟的JPA 平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查 ...
- mongodb多条件分页查询的三种方法(转)
一.使用limit和skip进行分页查询 public List<User> pageList(int pageNum ,int pageSize){ List<User> u ...
随机推荐
- Mybatis拦截器执行过程解析
上一篇文章 Mybatis拦截器之数据加密解密 介绍了 Mybatis 拦截器的简单使用,这篇文章将透彻的分析 Mybatis 是怎样发现拦截器以及调用拦截器的 intercept 方法的 小伙伴先按 ...
- 在使用SSH+JPA开发中,ajax使用ObjectMapper类从后台向前台传值
使用ObjectMapper对象的writeValue方法 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.writeValu ...
- php 文件夹 与 文件目录操作
php文件夹操作函数 string basename ( string path [, string suffix] )给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是 ...
- BA-防冻开关的安装
防冻开关学名:防冻恒温保护器,在通风空调系统中监测加热盘管空气侧温度来防止盘管冻坏.具有较小的转换差和良好的重复性.可自动复位.当在30cm长的毛细管上温度低于选择的设定值时会产生一个闭合信号给DDC ...
- I - Agri-Net
I - Agri-Net poj 1258 注意:多组数据输入. #include<cstdio> #include<cstring> #include<iostream ...
- 今天我也用上了阿里云的Centos
Redis官方不支持Windows,第三方实现的64位服务端不稳定,因此在我的忽悠之下,公司出钱买了个阿里云的Centos7,4G内存,30G硬盘.现在我也可以真真正正的玩Centos了,python ...
- java连接数据库核心代码
一.oracle String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:Oracle ...
- disruptor实操作手冊(二)
多消费者场景 上一篇文章介绍了怎样构建一个简单的disruptorproject之后.应该有相当一部分客官骂娘了,确实这种范例在其他地方多的是. 从这篇開始,介绍一些不一样的东西. 一,多个消费者: ...
- 杂项-软件: VBA(Visual Basic for Applications)
ylbtech-杂项-软件: VBA(Visual Basic for Applications) VBA (Visual Basic宏语言) Visual Basic for Application ...
- 杂项-快捷键:Google浏览器常用快捷键
ylbtech-杂项-快捷键:Google浏览器常用快捷键 1.返回顶部 1. Google浏览器,是一个由Google(谷歌)公司开发的开放原始码网页浏览器.该浏览器是基于其他开放原始码软件所撰写, ...