第九篇:Spring Boot整合Spring Data JPA_入门试炼06
八、JpaSpecificationExecutor接口
前言:该接口主要提供了多条件查询的支持,并且可以在查询中添加分页和排序。
注意:JpaSpecificationExecutor接口是独立存在的。完全独立。
1、持久层接口:
public interface UsersRepositorySpecification extends JpaRepository<Users,Integer>, JpaSpecificationExecutor<Users> {
}
测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class UsersRepositorySpecificationTest {@Autowiredprivate UsersRepositorySpecification usersRepositorySpecification;/*** jpaSpecificationExecutor 接口 单条件测试*/@Testpublic void jpaSpecificationExecutor() {/*** Specification<Users> 用于封装条件*/Specification<Users> spec = new Specification<Users>() {/*** Root<Users>:查询对象属性封装* CriteriaQuery<?> query:疯长了我们要执行的查询中各个部分的信息,select from order* CriteriaBuilder:查询条件的构造器,定义不同查询条件* @param root* @param query* @param criteriaBuilder* @return*/@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {/*** 参数1:查询的属性* 参数2:查询的指*/Predicate pre = criteriaBuilder.equal(root.get("name"), "zhanga");return pre;}};List<Users> list = usersRepositorySpecification.findAll(spec);for (Users users : list) {System.out.println(users);}}/*** jpaSpecificationExecutor 接口 多条件测试*/@Testpublic void jpaSpecificationExecutor2() {/*** Specification<Users> 用于封装条件*/Specification<Users> spec = new Specification<Users>() {/*** Root<Users>:查询对象属性封装* CriteriaQuery<?> query:疯长了我们要执行的查询中各个部分的信息,select from order* CriteriaBuilder:查询条件的构造器,定义不同查询条件* @param root* @param query* @param criteriaBuilder* @return*/@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {/*** where name='zhanga' and age = 20* 参数2:查询的指*/List<Predicate> list = new ArrayList<>();list.add(criteriaBuilder.equal(root.get("name"), "zhanga"));list.add(criteriaBuilder.equal(root.get("age"), 22));Predicate[] arr = new Predicate[list.size()];return criteriaBuilder.and(list.toArray(arr));}};List<Users> list = usersRepositorySpecification.findAll(spec);for (Users users : list) {System.out.println(users);}}/*** jpaSpecificationExecutor 接口 多条件测试2*/@Testpublic void jpaSpecificationExecutor3() {/*** Specification<Users> 用于封装条件*/Specification<Users> spec = new Specification<Users>() {/*** Root<Users>:查询对象属性封装* CriteriaQuery<?> query:疯长了我们要执行的查询中各个部分的信息,select from order* CriteriaBuilder:查询条件的构造器,定义不同查询条件* @param root* @param query* @param cb* @return*/@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {/*** where name='zhanga' and age = 20* 参数2:查询的指*/
// List<Predicate> list = new ArrayList<>();
// list.add(criteriaBuilder.equal(root.get("name"), "zhanga"));
// list.add(criteriaBuilder.equal(root.get("age"), 22));
// Predicate[] arr = new Predicate[list.size()];//只有and
// return cb.and(cb.equal(root.get("name"),"zhanga"),cb.equal(root.get("age"),22));//只有or
// return cb.or(cb.equal(root.get("name"),"zhanga"),cb.equal(root.get("age"),22));//and+or//name='zhanga' and age=22 or id =2 and 的优先级高于or 相当于//(name='zhanga' and age=22) or id =2return cb.or(cb.equal(root.get("name"), "zhanga"), cb.equal(root.get("age"), 22), cb.equal(root.get("id"), 2));}};//添加排序规则Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "id"));List<Users> list = usersRepositorySpecification.findAll(spec, sort);for (Users users : list) {System.out.println(users);}}
}
本文源码下载:
github地址:
https://github.com/gb-heima/Spring-Boot-Actual-Combat/tree/master/parent/spring-boot-chapter-9
第九篇:Spring Boot整合Spring Data JPA_入门试炼06相关推荐
- springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA
今日份主题 Spring Boot 整合 Spring Data JPA JPA(Java Persistence API)是用于对象持久化的 API,是Java EE 5.0 平台标准的 ORM 规 ...
- Spring boot 整合Spring Security Jwt
记录学习Spring boot 整合Spring Security Jwt 学习参考 – 慢慢的干货 https://shimo.im/docs/OnZDwoxFFL8bnP1c/read 首先创建S ...
- Spring Boot 整合——Spring batch重试和回滚
关于版本 依赖 版本 springboot 2.4.0 spring batch 2.4.0 代码地址 因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码.全部的 ...
- 二、何为Spring Boot整合Spring Cloud?
题语:学习方法之多思考:正向.逆向.跳跃 作者:A哥(YourBatman) wx号:fsx641385712(备注"Java群"字样) 公众号:BAT的乌托邦(ID:BAT-ut ...
- spring boot整合spring security笔记
最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...
- 认证与授权流程与spring boot整合 spring security(1)
一 spring security 1.1 spring security的作用 Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截 ...
- spring boot 整合 spring cache 简单使用
spring boot 整合 spring cache 简单使用 spring cache简介 使用spring cache spring cache简介 Spring 3.1起,提供了基于注解的对C ...
- Spring Boot 整合——Spring Boot整合kafka整合
Spring Boot 整合之前的内容 项目名称 描述 地址 base-data-mybatis 整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件) 未完成 base-jpa J ...
- 第九篇:Spring Boot整合Spring Data JPA_入门试炼01
Spring Data JPA:介绍: Spring Data就是spring提供操作数据库的框架,而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据库的模块 ...
最新文章
- 腐蚀国内稳定服务器_WOW正式服:热修提升坐骑掉率,下周改动大幻象装备必带腐蚀...
- grep -q用于if逻辑判断
- Linux Ubuntu 安装 anaconda3和 Pycharm 社区版本
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
- CWE视图层级关系解析:节点关系查询
- 新手学Linux:在VMware14中安装CentOS7详细教程
- python类的命名空间_Python之关于类变量的两种赋值区别详解
- [Python 学习] 两、在Linux使用平台Python
- 中国酒柜行业市场供需与战略研究报告
- struts拦截器+注解实现网络安全要求中的日志审计功能
- 4.2 文本特征抽取的两种方式CountVectorizer与TfidfVectorizer
- nginx 域名跳转
- mysql下载和安装详细教程
- 微信小程序获取屏幕高度
- Origin 2017 给曲线加标记符号
- Android应用切换皮肤功能实现
- 【Beta】 第六次Daily Scrum Meeting
- php jwt token刷新方案,laravel JWT自动刷新 自定义验证器
- 不花一分钱申请免费域名和ssl证书
- canvas 画布标签