springDataJpa多条件动态查询之JpaSpecificationExecutor

本文主要是介绍springDataJpa多条件动态查询之JpaSpecificationExecutor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在spring中多条件动态查询:

准备实体表:

多条件查询,加上排序 

 /*** 排序加上查询* 模糊查询 用户名 和 密码 和 状态*/@Testpublic void  testQuery(){Specification<Student> specification = new Specification<Student>() {@Overridepublic Predicate toPredicate(Root<Student> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {// 1.root获取比较属性Path<String> username = root.get("username");Path<String> password = root.get("password");Path<Boolean> isDel = root.get("isDel");// 2.criteriaBuilder构造查询条件Predicate like = criteriaBuilder.like(username, "%用户名%");Predicate like1 = criteriaBuilder.like(password, "%码%");Predicate equal = criteriaBuilder.equal(isDel, false);// 级联条件,可以用 and 或者 orPredicate and = criteriaBuilder.and(like, like1, equal);// 返回查询条件return and;}};// 新建排序条件,按照成绩这一字段 降序排列Sort sort = new Sort(Sort.Direction.DESC,"grade");// 调用查询方法。把拼接的条件传入List<Student> all = studentRepository.findAll(specification,sort);for (Student student : all) {System.out.println(student);}}

结果:

 

多条件查询,分页加排序

/**** 多条件查询,在多个查询满足 用户名和多个成绩的数据* 分页加上排序*/@Testpublic void queryTest(){List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);Specification<Student> specification = new Specification<Student>() {@Overridepublic Predicate toPredicate(Root<Student> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {Path<String> username = root.get("username");Path<Integer> grade = root.get("grade");Predicate like = criteriaBuilder.like(username, "%名%");CriteriaBuilder.In<Integer> in = criteriaBuilder.in(grade);CriteriaBuilder.In<Integer> value=null;for (Integer integer : list) {value = in.value(integer);}// 拼接条件返回return criteriaBuilder.and(like, value);}};// 创建排序条件Sort sort = new Sort(Sort.Direction.DESC, "grade");// 创建分页条件 page为当前页 size为每页显示条数Pageable pageRequest = new PageRequest(1-1,10,sort);// 将条件和分页传入,返回pagePage<Student> all = studentRepository.findAll(specification, pageRequest);// 获得查询的数据List<Student> content = all.getContent();for (Student student : content) {System.out.println(student);}System.out.println("总数据数量:"+all.getTotalElements());System.out.println("总页数:"+all.getTotalPages());System.out.println("当前页:"+all.getNumber());System.out.println("当前页显示元素:"+all.getNumberOfElements());System.out.println(all.getPageable());System.out.println("每页显示个数:"+all.getSize());System.out.println("排序规则:"+all.getSort());}

 查询结果

 

 

这篇关于springDataJpa多条件动态查询之JpaSpecificationExecutor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749856

相关文章

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...