JPA构建多条件查询

方式一

new Specification匿名内部类,通过实现该匿名内部类的toPredicate方法构建查询sql

Specification<T> specification = new Specification<T>() {@Overridepublic Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> predicateList = new ArrayList<Predicate>();predicateList.add(cb.equal(root.get("col1").as(String.class), "0"));predicateList.add(cb.equal(root.get("col2").as(String.class), "5"));predicateList.add(cb.equal(root.get("col3").as(String.class), t));// 构建(col4 != '24' or col3 is null)条件predicateList.add(cb.or(cb.notEqual(root.get("col4").as(String.class), "24"),cb.isNull(root.get("col4").as(String.class))));if (map.get("col4") != null){predicateList.add(cb.equal(root.get("col4").as(String.class), map.get("col4")));}if (map.get("col5") != null){predicateList.add(cb.equal(root.get("col5").as(String.class), map.get("col5")));}if (map.get("col6") != null){predicateList.add(cb.equal(root.get("col6").as(String.class), map.get("col6")));}if (map.get("col7") != null){predicateList.add(cb.equal(root.get("col7").as(String.class), map.get("col7")));}if (map.get("col8") != null){predicateList.add(cb.like(root.get("col8").as(String.class), "%" + map.get("col8").toString().trim() + "%"));}if (map.get("col9") != null){Object obj = map.get("col9");if (obj instanceof List){List list = (List) obj;List<Integer> orgList = new ArrayList<>();list.forEach(o -> {if (o != null){try{orgList.add(Integer.valueOf(o.toString()));}catch (NumberFormatException e){log.error("传参col9格式错误");}}});if (!orgList.isEmpty()){predicateList.add(root.get("col").as(Integer.class).in(list));}}}Predicate[] p = new Predicate[predicateList.size()];query.where(predicateList.toArray(p));query.orderBy(cb.desc(root.get("id").as(Integer.class)));return query.getRestriction();}};Pageable pageable = PageRequest.of(page, size);
// 得到查询结果
Page<T> pageResult = tDao.findAll(specification, pageable);

方式二

根据参数组装sql条件,设置对应位置参数。缺点:in查询支持比较麻烦

@PersistenceContext
private EntityManager entityManager;// 构建in查询sql,使用list接收参数,为后续设置对应位置参数
Object obj = map.get("list");
if (obj instanceof List){sql.append(" and col in (");List orgList = (List) obj;orgList.forEach(o -> {queryCondition.add(o);});sql.append(orgList.stream().map(o -> "?").collect(Collectors.joining(","))).append(")");
}// 普通查询条件构建
if (!isNullOrBlank(String.valueOf(map.get("col2")))) {sql.append(" and col2= ?");queryCondition.add(map.get("col2"));
}// 根据sql List<Object> queryCondition list,
Query query = entityManager.createNativeQuery(sql,clazz);
query.setFirstResult((int) pageable.getOffset());
query.setMaxResults(pageable.getPageSize());for (int batch = 0; batch < queryCondition.size(); batch++) {query.setParameter(batch + 1,queryCondition.get(batch));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习yolov5行人社交安全距离监测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统工作原理主要组成部分技术实现优势和特点应用场景和前景 二、功能三、系统四. 总结 一项目简介 基于深度学习 YOLOv5 的行人社交安全距离监测系统是一种…

数据仓库与数据挖掘复习资料

一、题型与考点[第一种] 1、解释基本概念(中英互译解释简单的含义)&#xff1b; 2、简答题(每个10分有两个一定要记住)&#xff1a; ① 考时间序列Time series(第六章)的基本概念含义解释作用&#xff08;序列模式挖掘的作用&#xff09;&#xff1b; ② 考聚类(第五章)重点考…

自动化定时发送天气提醒邮件

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;如喜欢麻烦您点个&#x1f44d;或者点个⭐&#xff01; &#x1f…

配置端口安全示例

组网需求 如图1所示&#xff0c;用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性&#xff0c;将接入设备Switch的接口使能端口安全功能&#xff0c;并且设置接口学习MAC地址数的上限为接入用户数&#xff0c;这样其他外来人员使用自己带来的PC无法访问公…

华为配置风暴控制示例

组网需求 如下图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要防止二层网络转发的广播、未知组播或未知单播报文产生广播风 配置思路 用如下的思路配置风暴控制。 通过在GE0/0/1接口视图下配置风暴控制功能&#xff0c;实现防止二层网络转发的…

城市之眼:数据可视化在智慧城市的角色

作为智慧城市建设的核心组成部分&#xff0c;数据可视化扮演着至关重要的角色。在城市中&#xff0c;数据源源不断地产生&#xff0c;涵盖了从交通流量、环境质量到市民需求等各个方面。而数据可视化作为将这些数据呈现出来的手段&#xff0c;对智慧城市的发展起着关键性的作用…

HarmonyOS架构及关键技术整理

技术解析&#xff1a;鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计&#xff0c;这是一种全新的系统架构&#xff0c;能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能&#xff0c;提高了系统的安全性和可定制性。此外&#xff0c;鸿蒙系统…

多传感器融合SLAM在自动驾驶方向的初步探索的记录

1. VIO的不可观问题 现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误,…

【Java面试——JVM和调优】

JVM虚拟机和调优相关。 5.1 类加载机制 类加载的生命周期&#xff1f; 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中&#xff0c;加载、验证、准备和初始化这四个阶段发生的顺序是确定的&#xff0c;而解析阶段则不一定&#xff0c;它在某些…

决策树 (人工智能期末复习)

几个重要概念 信息熵&#xff1a;随机事件未按照某个属性的不同取值划分时的熵减去按照某个属性的不同取值划分时的平均 熵。即前后两次熵的差值。 表示事物的混乱程度&#xff0c;熵越大表示混乱程度越大&#xff0c;越小表示混乱程度越小。 对于随机事件&#xff0c;如果它的…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN&#xff0c;但是可以用 &#xff08;select 语句1&#xff09; union &#xff08;select 语句2&#xff09;代替 &#x1f436;1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意&#xff0c;UNION 内部的 SELECT 语句…

flutter学习-day4-库和库的导入

&#x1f4da; 目录 指定库前缀仅导入库的一部分延迟加载库 本文学习和引用自《Flutter实战第二版》&#xff1a;作者&#xff1a;杜文 1. 指定库前缀 如果导入两个具有冲突标识符的库&#xff0c;则可以为一个或两个库指定前缀。例如&#xff0c;如果 library1 和 library2 …

计算机图形图像技术(图像锐化处理与图像解析)

一、实验原理&#xff1a; 1、拓展Sobel算子锐化 void Sobel(Array src, Array dst, int ddepth, int dx, int dy, int ksize); ①参数&#xff1a;src为输入图像&#xff1b;dst为输出图像&#xff0c;大小和通道数与源图像一致&#xff0c;必要时重建&#xff1b;ddepth为目…

unity 2d 入门 飞翔小鸟 飞翔动作动画描点(六)

1、创建文件夹新建动画控制器 右键->create->Animator controer 给图层创建动画 把创建后的动画控制器拖拽至对应图层 点击window->Animation->Animation 点击创建文件夹 把图片拖拽到这里面&#xff0c;就可以了 然后我们就看在player看到已经把动作挂上去 点…

ChatGPT文书替代论“热”潮背后的“冷”思考

2022年11月底OpenAI推出的人工智能聊天工具ChatGPT仅推出一周就火爆全球&#xff0c;推出两个月&#xff0c;就在全球范围内坐拥1亿用户&#xff0c;根据华尔街消息&#xff0c;OpenAI目前估值已达290亿美元。 认识ChatGPT ChatGPT是由美国成立的人工智能研究公司OpenAI研究开…

MyBatis-Plus 基础操作指南:实现高效的增删改查

引言 大家好&#xff0c;今天我们来聊聊如何使用 MyBatis-Plus&#xff08;接下来简称为 MP&#xff09;&#xff0c;一个流行的 MyBatis 增强工具&#xff0c;来简化和加速我们的数据库操作。如果你是一位初学者&#xff0c;不用担心&#xff0c;我将带你从头到尾详细了解 MP …

华为数通---BFD多跳检测示例

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…

leetcode707.设计链表

题目描述 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的…

时间序列预测 — GRU实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 数据集简介 1.2 导入库文件 1.3 数据集处理 1.4 训练数据构造 2 模型训练与预测 2.1 模型训练 2.2 模型多步预测 2.3 预测可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集7&#xff1a;常州普利司通光伏数据集&#xff08;下载链接&…

安全众测-内网渗透常用的工具和命令

最近参加企业内部的众测&#xff0c;我是一名新手&#xff0c;所以先学习使用工具扫描的方法。如下是我的一些经验。 记住&#xff1a;渗透测试的本质是信息收集&#xff0c;信息越多&#xff0c;出现漏洞的可能性就越大&#xff0c;一直到收集到所有资产为止。 网站的robots.…