HIBERNATE:disjunction和conjunction构造复杂的查询条件.
工作中小结:(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构造复杂的查询条件.相关推荐
- hibernate: 用Disjunction和Conjunction构造复杂的查询条件
Disjunction 与 Conjunction 表示逻辑或与逻辑与 可以构造复杂的Sql 语句 Disjunction disjunction = Restrictions.disjunction ...
- Hibernate:DisjunctionConjunction构造复杂的查询条件
HIBERNATE:DISJUNCTION&CONJUNCTION构造复杂的查询条件. Hibernate:Disjunction&Conjunction构造复杂的查询条件 Disju ...
- Hibernate:DisjunctionConjunction构造复杂的查询条件.
Hibernate:Disjunction&Conjunction构造复杂的查询条件 Disjunction和Conjunction是逻辑或和逻辑与,如下: 用来组合一组逻辑或[or]条件的方 ...
- 【Python】通过构造树结构解析查询条件
[Python]通过构造树结构解析查询条件 背景概述 最近遇到了需要解析类似这种东西的需求 名称,摘要,主权项+=(育种 or 选育 or (培育 and (种 or 苗)) or 育苗) and ( ...
- Hibernate的Disjunction和Conjunction
关于Disjunction和Conjunction的如何使用? 本人在学习阶段也曾在百度搜索,但是找到后,感觉描述的不太直白,思考良久才看懂是什么意思.故此在此小结一下. 以Oracle数据库的sco ...
- hibernate的查询条件lt_hibernate的多条件查询——Criteria Query的应用
查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条 ...
- hibernate框架学习笔记11:Criteria查询详解
创建实体类对象: package domain;import java.util.HashSet; import java.util.Set;//客户实体 public class Customer ...
- Hibernate 一级缓存,二级缓存,查询缓存
概念: 1.什么是缓存呢? 缓存:是计算机领域的概念,它介于应用程序和永久性数据存储源之间. 缓存:一般人的理解是在内存中的一块空间,可以将二级缓存配置到硬盘.用白话来说,就是一个存储数据的容器.我们 ...
- 数据库 ogm_带有Hibernate OGM的NoSQL –第二部分:查询数据
数据库 ogm Hibernate OGM的第一个最终版本发布于 1月底,团队一直在忙于制作一系列教程式博客,使您有机会轻松地从Hibernate OGM重新开始. 第一部分是关于设置和保留您的第一个 ...
最新文章
- 【数学建模】MATLAB从入门到精通:Logistic模型原理及应用案例(附MATLAB代码)
- 使用重定向的输入和输出创建子进程
- foxpro mysql_将Visual Foxpro连接到MySql数据库
- 9个问题,带你掌握流程控制语句中的java原理
- python十进制转换_Python方法如何将普通IP转换为十进制IP
- Redis与MySQL的双剑合璧,一文读懂redis
- 把分类信息,在表格中展现出来,通过合并单元格来实现信息之间的层级关系...
- nginx nodejs环境配置_Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)
- java关键字 final static
- 【leetCode】69. x 的平方根
- macbook删除全部蓝牙设备列表
- 如何重新修改VHDX硬盘大小?
- 众创空间和共享办公室有什么不同吗
- TPM、TCM分别是什么?
- 企业为什么需要B2B订货系统
- 腾讯云·部署Eclipse Che(云原生IDE)(CSDN云通用)
- 为什么越学反而越蠢?碎片化学习是个骗局
- Navicat工具数据库表结构导出 word编写数据库设计文档
- tensorFlow2.0基本操作(一)
- (转)SCJP 认证考试指南