八、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相关推荐

  1. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA

    今日份主题 Spring Boot 整合 Spring Data JPA JPA(Java Persistence API)是用于对象持久化的 API,是Java EE 5.0 平台标准的 ORM 规 ...

  2. Spring boot 整合Spring Security Jwt

    记录学习Spring boot 整合Spring Security Jwt 学习参考 – 慢慢的干货 https://shimo.im/docs/OnZDwoxFFL8bnP1c/read 首先创建S ...

  3. Spring Boot 整合——Spring batch重试和回滚

    关于版本 依赖 版本 springboot 2.4.0 spring batch 2.4.0 代码地址 因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码.全部的 ...

  4. 二、何为Spring Boot整合Spring Cloud?

    题语:学习方法之多思考:正向.逆向.跳跃 作者:A哥(YourBatman) wx号:fsx641385712(备注"Java群"字样) 公众号:BAT的乌托邦(ID:BAT-ut ...

  5. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  6. 认证与授权流程与spring boot整合 spring security(1)

    一   spring security 1.1 spring security的作用 Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截 ...

  7. spring boot 整合 spring cache 简单使用

    spring boot 整合 spring cache 简单使用 spring cache简介 使用spring cache spring cache简介 Spring 3.1起,提供了基于注解的对C ...

  8. Spring Boot 整合——Spring Boot整合kafka整合

    Spring Boot 整合之前的内容 项目名称 描述 地址 base-data-mybatis 整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件) 未完成 base-jpa J ...

  9. 第九篇:Spring Boot整合Spring Data JPA_入门试炼01

    Spring Data JPA:介绍: Spring Data就是spring提供操作数据库的框架,而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据库的模块 ...

最新文章

  1. 腐蚀国内稳定服务器_WOW正式服:热修提升坐骑掉率,下周改动大幻象装备必带腐蚀...
  2. grep -q用于if逻辑判断
  3. Linux Ubuntu 安装 anaconda3和 Pycharm 社区版本
  4. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
  5. CWE视图层级关系解析:节点关系查询
  6. 新手学Linux:在VMware14中安装CentOS7详细教程
  7. python类的命名空间_Python之关于类变量的两种赋值区别详解
  8. [Python 学习] 两、在Linux使用平台Python
  9. 中国酒柜行业市场供需与战略研究报告
  10. struts拦截器+注解实现网络安全要求中的日志审计功能
  11. 4.2 文本特征抽取的两种方式CountVectorizer与TfidfVectorizer
  12. nginx 域名跳转
  13. mysql下载和安装详细教程
  14. 微信小程序获取屏幕高度
  15. Origin 2017 给曲线加标记符号
  16. Android应用切换皮肤功能实现
  17. 【Beta】 第六次Daily Scrum Meeting
  18. php jwt token刷新方案,laravel JWT自动刷新 自定义验证器
  19. 不花一分钱申请免费域名和ssl证书
  20. canvas 画布标签

热门文章

  1. suse linux 11如何分区,新手发帖,关于SUSE11挂载磁盘阵列并分区的问题
  2. oracle运行环境配置,oracle 环境配置开机自启动
  3. ios django 连接mysql_Django---Django连接Mysql数据库
  4. 如何打开java_怎样运行java
  5. 如何利用redis实现秒杀系统
  6. python机器学习常用包
  7. 相对路径转成绝对路径
  8. c# MEF框架(一 MEF简介及简单的Demo)
  9. RTTI-运行时类型识别
  10. 推文科技:AI解决方案助力内容出海