Spring Data JPA 最近遇到的有关复杂查询,用复杂查询 Specification 处理。

JPA组合复杂查询:

  1. And 和 Or 查询
  2. 多表连表查询 Join
  3. 范围查询 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查询相关推荐

  1. oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  2. mysql join子查询_MySQL的多表join中,子查询伤不起啊!

    leader找到我,说下面的sql执行后cpu100%,但是这三张join的表数据量都在2W左右,不应该啊,是不是数据库服务器配置出了问题啊.sql如下: select a.excel_id, a.r ...

  3. 删除oracle所有表外键,Oracle中查询、禁用、起用、删除表外键

    Oracle中查询.禁用.启用.删除表外键 1.查询所有表的外键: select table_name, constraint_name from user_constraints where con ...

  4. mysql做十亿条数据查询_数据库优化:mysql数据库单机数十亿数据查询设计

    很久没写文章,是不是想着写点什么东西,分享下我的数据库设计思路,主要是针对单机数十亿及以上数据查询优化技巧. 如果只是简单的查询,没有频繁的写入操作,对查询速度不要求在毫秒级别,就不需要什么大型的数据 ...

  5. Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...

  6. jpa多表联查动态_jpa动态查询与多表联合查询

    jpa操作单表时简单明了,省去了sql的拼写,但如果需要多表联查的时候就不行了. 1.当jpa需要联表查询的时候 用到@Query注解,自定义sql 其中nativeQuery=true,指定使用原生 ...

  7. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  8. Mysql 数据库表中有索引为什么还是查询慢?

    问题分析 在进行数据库查询的时候,我们都知道索引可以加快数据查询的效率.但是在实际的业务场景下,经常会遇到即使在表中增加了索引,但是同样还是会出现数据查询慢的问题.这就需要具体分析数据查询慢的具体原因 ...

  9. SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、修改)

    SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELE ...

最新文章

  1. Android之9图的制作
  2. 并发集合和普通集合以及安全集合的区别
  3. 面试官:为什么 Spring Boot 的 jar 可以直接运行
  4. SQL server 2005 数据库只能用计算机名连接不能用IP地址
  5. directx9又更新了。
  6. loadrunner回放时IE模拟器弹出windows安全警告
  7. Floyd's Tortoise and Hare循环检测算法
  8. 坐标中国|中国速度,挑战极限驱动发展“快车”
  9. c语言动态开辟数组(一维与二维)
  10. threw exception [Circular view path [index]: would dispatch back to the current handler URL [/index]
  11. 18.链表插入——尾插法
  12. 【08期】说说Object类下面有几种方法呢?
  13. Foods Keep Younger, Strong And Healthy
  14. 阿里云团队畅谈图片服务架构演进
  15. Elasticsearch高级操作 (多关键字精确查询)
  16. android 调用系统铃声方法
  17. 常用3500个汉字(转收藏)
  18. 使用 Serialization 保存数据到文件
  19. 2022-01-21 界面长亮不熄屏
  20. java cucumber,如何在Cucumber Java中的步骤之间传递变量值?

热门文章

  1. matlab delta中性仓位,Delta中性怎么赢利?具体操作如下
  2. Revit二次开发-不同Revit版本下椭圆的处理
  3. windy faye
  4. 什么是sql注入,如何防止sql注入
  5. linux53端口,Linux的DNS的53端口
  6. mac系统下easyconnect连接公司网络,53端口占用问题
  7. 正则语言(转的 大额_skylar )
  8. R语言ggplot2-颜色设置调参详解
  9. python中str和repr_关于Python中repr和str用法的区别?
  10. SQL窗口函数-排名窗口函数