JPA组合查询之AND和OR查询、多表JOIN查询、范围IN查询
Spring Data JPA 最近遇到的有关复杂查询,用复杂查询 Specification 处理。
JPA组合复杂查询:
- And 和 Or 查询
- 多表连表查询 Join
- 范围查询 In
代码如下:
List<String> employeeIds = ["反射","千里","王湾"];Page<Attendance> findAll = attendanceRepository.findAll(new Specification<Attendance>() {private static final long serialVersionUID = 424488123558533825L;@Overridepublic Predicate toPredicate(Root<Attendance> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {// AND查询(里面的查询用and连接)List<Predicate> predicates = new ArrayList<>();predicates.add(cb.between(root.get("repDate").as(String.class),monthAttendanceParam.getYearAndMonth() + "-01",monthAttendanceParam.getYearAndMonth() + "-31"));// IN查询In<String> in = cb.in(root.get("employeeId"));for(String string : employeeIds){in.value(string);}predicates.add(in);// JOIN查询Join<Employee, Attendance> join = root.join("employeeName", JoinType.LEFT);predicates.add(cb.equal(join.get("employeeName"), monthAttendanceParam.getEmployeeName()));Predicate and = cb.and(predicates.toArray(new Predicate[0]));// OR查询(里面的查询用or连接)List<Predicate> predicatesOr = new ArrayList<>();predicatesOr.add(cb.equal(root.get("employeeId"), "777"));predicatesOr.add(cb.equal(root.get("employeeId"), "666"));Predicate or = cb.or(predicatesOr.toArray(new Predicate[0]));return criteriaQuery.where(and, or).getRestriction();}}, pageable);System.out.println("信息:" + findAll.getContent());
JPA组合查询之AND和OR查询、多表JOIN查询、范围IN查询相关推荐
- oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...
语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...
- mysql join子查询_MySQL的多表join中,子查询伤不起啊!
leader找到我,说下面的sql执行后cpu100%,但是这三张join的表数据量都在2W左右,不应该啊,是不是数据库服务器配置出了问题啊.sql如下: select a.excel_id, a.r ...
- 删除oracle所有表外键,Oracle中查询、禁用、起用、删除表外键
Oracle中查询.禁用.启用.删除表外键 1.查询所有表的外键: select table_name, constraint_name from user_constraints where con ...
- mysql做十亿条数据查询_数据库优化:mysql数据库单机数十亿数据查询设计
很久没写文章,是不是想着写点什么东西,分享下我的数据库设计思路,主要是针对单机数十亿及以上数据查询优化技巧. 如果只是简单的查询,没有频繁的写入操作,对查询速度不要求在毫秒级别,就不需要什么大型的数据 ...
- Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...
- jpa多表联查动态_jpa动态查询与多表联合查询
jpa操作单表时简单明了,省去了sql的拼写,但如果需要多表联查的时候就不行了. 1.当jpa需要联表查询的时候 用到@Query注解,自定义sql 其中nativeQuery=true,指定使用原生 ...
- .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...
阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...
- Mysql 数据库表中有索引为什么还是查询慢?
问题分析 在进行数据库查询的时候,我们都知道索引可以加快数据查询的效率.但是在实际的业务场景下,经常会遇到即使在表中增加了索引,但是同样还是会出现数据查询慢的问题.这就需要具体分析数据查询慢的具体原因 ...
- SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、修改)
SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELE ...
最新文章
- Android之9图的制作
- 并发集合和普通集合以及安全集合的区别
- 面试官:为什么 Spring Boot 的 jar 可以直接运行
- SQL server 2005 数据库只能用计算机名连接不能用IP地址
- directx9又更新了。
- loadrunner回放时IE模拟器弹出windows安全警告
- Floyd's Tortoise and Hare循环检测算法
- 坐标中国|中国速度,挑战极限驱动发展“快车”
- c语言动态开辟数组(一维与二维)
- threw exception [Circular view path [index]: would dispatch back to the current handler URL [/index]
- 18.链表插入——尾插法
- 【08期】说说Object类下面有几种方法呢?
- Foods Keep Younger, Strong And Healthy
- 阿里云团队畅谈图片服务架构演进
- Elasticsearch高级操作 (多关键字精确查询)
- android 调用系统铃声方法
- 常用3500个汉字(转收藏)
- 使用 Serialization 保存数据到文件
- 2022-01-21 界面长亮不熄屏
- java cucumber,如何在Cucumber Java中的步骤之间传递变量值?