工作中小结:(1)

查询某个批次的数据,也还可以输入州/县/医疗机构(这三个是或者的关系);//disjunction或者

关系:【 批次的数据  &&  (州   ||  县   ||   医疗机构)】 关系(用下面方法一:)

(2).还有一种情况:是下拉框可以选择条件查询,可以选择多个条件进行查询(这种是并且的关系);//conjunction并且

关系: 【批次的数据  &&  州   &&  县   &&   医疗机构 】  关系 (用下面方法二:)

情况不同,用到的方法也不一样,下面是两种情况的方法附上:

方法一:用到disjunction或者   有&&有||

@SuppressWarnings("serial")public static <T> Specification<T> findSpecification(Map<String, Object> searchParams, final Class<T> clazz) {return new Specification<T>() {@SuppressWarnings("unchecked")@Overridepublic Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {Predicate p = cb.conjunction();//并且Predicate d = cb.disjunction();//或者for (Entry<String, Object> entry : searchParams.entrySet()) {String[] key = entry.getKey().split("_");if("P".equals(key[0])) {if ("EQ".equals(key[1])) {p.getExpressions().add(cb.equal(root.<String>get(key[2]), entry.getValue().toString().trim()));}if ("NOTEQ".equals(key[1])) {
//                          p.getExpressions().add(cb.equal(root.<String>get(key[2]), entry.getValue().toString().trim()));p.getExpressions().add(cb.notEqual(root.<String>get(key[2]), entry.getValue().toString().trim()));}if ("LIKE".equals(key[1])) {p.getExpressions().add(cb.like(root.<String>get(key[2]), "%" + entry.getValue().toString().trim() + "%"));}if("IN".equals(key[1])) {p.getExpressions().add(cb.and(root.get(key[2]).in((List<Integer>)entry.getValue())));}if ("EGT".equals(key[1])) {p.getExpressions().add(cb.greaterThanOrEqualTo(root.<String>get(key[2]), entry.getValue().toString().trim()));}if ("EIT".equals(key[1])) {p.getExpressions().add(cb.lessThanOrEqualTo(root.<String>get(key[2]), entry.getValue().toString().trim()));}}else if("D".equals(key[0])) {if ("EQ".equals(key[1])) {d.getExpressions().add(cb.equal(root.<String>get(key[2]), entry.getValue().toString().trim()));}if ("LIKE".equals(key[1])) {d.getExpressions().add(cb.like(root.<String>get(key[2]), "%" + entry.getValue().toString().trim() + "%"));}}}//如果 disjunction 不为空if(!d.getExpressions().isEmpty()) {p.getExpressions().add(d);}return p;}};
}

方法二:是conjunction并且    纯&&关系

@SuppressWarnings("serial")public static <T> Specification<T> getSpecification(Map<String, Object> searchParams, final Class<T> clazz) {return new Specification<T>() {@SuppressWarnings("unchecked")@Overridepublic Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {Predicate predicate = cb.conjunction();//并且for (Entry<String, Object> entry : searchParams.entrySet()) {String[] key = entry.getKey().split("_");if ("EQ".equals(key[0])) {predicate.getExpressions().add(cb.equal(root.<String>get(key[1]), entry.getValue().toString().trim()));}if ("LIKE".equals(key[0])) {predicate.getExpressions().add(cb.like(root.<String>get(key[1]), "%" + entry.getValue().toString().trim() + "%"));}if ("NOTEQ".equals(key[0])) {predicate.getExpressions().add(cb.notEqual(root.<String>get(key[1]), entry.getValue().toString().trim()));}if ("EGT".equals(key[0])) {predicate.getExpressions().add(cb.greaterThanOrEqualTo(root.<String>get(key[1]), entry.getValue().toString().trim()));}if ("EIT".equals(key[0])) {predicate.getExpressions().add(cb.lessThanOrEqualTo(root.<String>get(key[1]), entry.getValue().toString().trim()));}                   if ("IN4".equals(key[0])) {   predicate.getExpressions().add(cb.and(root.get(key[1]).in((List<Integer>)entry.getValue())));}}return predicate;}};}

加油!

HIBERNATE:disjunction和conjunction构造复杂的查询条件.相关推荐

  1. hibernate: 用Disjunction和Conjunction构造复杂的查询条件

    Disjunction 与 Conjunction 表示逻辑或与逻辑与 可以构造复杂的Sql 语句 Disjunction disjunction = Restrictions.disjunction ...

  2. Hibernate:DisjunctionConjunction构造复杂的查询条件

    HIBERNATE:DISJUNCTION&CONJUNCTION构造复杂的查询条件. Hibernate:Disjunction&Conjunction构造复杂的查询条件 Disju ...

  3. Hibernate:DisjunctionConjunction构造复杂的查询条件.

    Hibernate:Disjunction&Conjunction构造复杂的查询条件 Disjunction和Conjunction是逻辑或和逻辑与,如下: 用来组合一组逻辑或[or]条件的方 ...

  4. 【Python】通过构造树结构解析查询条件

    [Python]通过构造树结构解析查询条件 背景概述 最近遇到了需要解析类似这种东西的需求 名称,摘要,主权项+=(育种 or 选育 or (培育 and (种 or 苗)) or 育苗) and ( ...

  5. Hibernate的Disjunction和Conjunction

    关于Disjunction和Conjunction的如何使用? 本人在学习阶段也曾在百度搜索,但是找到后,感觉描述的不太直白,思考良久才看懂是什么意思.故此在此小结一下. 以Oracle数据库的sco ...

  6. hibernate的查询条件lt_hibernate的多条件查询——Criteria Query的应用

    查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条 ...

  7. hibernate框架学习笔记11:Criteria查询详解

    创建实体类对象: package domain;import java.util.HashSet; import java.util.Set;//客户实体 public class Customer ...

  8. Hibernate 一级缓存,二级缓存,查询缓存

    概念: 1.什么是缓存呢? 缓存:是计算机领域的概念,它介于应用程序和永久性数据存储源之间. 缓存:一般人的理解是在内存中的一块空间,可以将二级缓存配置到硬盘.用白话来说,就是一个存储数据的容器.我们 ...

  9. 数据库 ogm_带有Hibernate OGM的NoSQL –第二部分:查询数据

    数据库 ogm Hibernate OGM的第一个最终版本发布于 1月底,团队一直在忙于制作一系列教程式博客,使您有机会轻松地从Hibernate OGM重新开始. 第一部分是关于设置和保留您的第一个 ...

最新文章

  1. 【数学建模】MATLAB从入门到精通:Logistic模型原理及应用案例(附MATLAB代码)
  2. 使用重定向的输入和输出创建子进程
  3. foxpro mysql_将Visual Foxpro连接到MySql数据库
  4. 9个问题,带你掌握流程控制语句中的java原理
  5. python十进制转换_Python方法如何将普通IP转换为十进制IP
  6. Redis与MySQL的双剑合璧,一文读懂redis
  7. 把分类信息,在表格中展现出来,通过合并单元格来实现信息之间的层级关系...
  8. nginx nodejs环境配置_Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)
  9. java关键字 final static
  10. 【leetCode】69. x 的平方根
  11. macbook删除全部蓝牙设备列表
  12. 如何重新修改VHDX硬盘大小?
  13. 众创空间和共享办公室有什么不同吗
  14. TPM、TCM分别是什么?
  15. 企业为什么需要B2B订货系统
  16. 腾讯云·部署Eclipse Che(云原生IDE)(CSDN云通用)
  17. 为什么越学反而越蠢?碎片化学习是个骗局
  18. Navicat工具数据库表结构导出 word编写数据库设计文档
  19. tensorFlow2.0基本操作(一)
  20. (转)SCJP 认证考试指南

热门文章

  1. nock模拟服务响应_使用Node.js nock拦截HTTP请求
  2. 网络攻防技术(2021期末考试)
  3. 总结Android系统启动完整流程(六)
  4. 文件上传漏洞攻击与防御
  5. Golang-Beego(go mod)
  6. Java 实现扫雷与高胜率低耗时自动扫雷 AI (下)
  7. Python 批量下载SIGMOD,VLDB的论文 Mac OS
  8. [WebRTC导读] VideoRender 视频渲染类
  9. Android 自定义歌词滚动
  10. Web滚动字幕(MARQUEE示例)