jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

PS : mybatis 中也有对于 criteria 的使用,见另一文章:mybatis :Criteria 查询、条件过滤用法

 

1. 业务场景:

(1) . 按业务条件查到所有数据后,要过滤掉其中 “当前领导自己填报的但不由自己审批的数据” ,本来我一直在想是不是会有和 sql 中类似于 except 效果的实现 ,就一直想找这个方法,但没有点出这个方法来,直到在源码中看到一个 not 方法 。

于是尝试写为:

Predicate a = cb.notEqual(root.get("approverId"), uid); // 非他审批
Predicate b = cb.equal(root.get("employeeId"), uid); // 他填报
list.add(cb.and(a, b).not()); 这样可以得到 cb.and(a, b) 结果的反集,实现去除效果。

(2) .  在微信端要求在一个输入框中实现多种类型数据查询。可输入“姓名、项目名称、工作任务、工作类型” 中的任意一种,并作相应条件过滤。

这种只给一个参数却可能代表多种类型数据的实现 如下:

  Predicate p = cb.or(cb.like(root.get("employeeName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("busName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("projectName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("jobTypeName"), "%" + search + "%"));list.add(p);

 

2. 最终实现:

  @Overridepublic Object findByPage(Pageable pageable, final String employeeId, final String employeeName, String beginDate, String endDate,final String departmentId, final Integer status, final String processInstanceId,final String approveId, final String jobTypeId,final String projectId, final String busId, final String search, final String uid) {Page<WorkWeight> page = workWeightRepository.findAll(new Specification<WorkWeight>() {@Overridepublic Predicate toPredicate(Root<WorkWeight> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> list = Lists.newArrayList();//构造条件list.add(cb.equal(root.get("delFlag"), "0"));// 参数 search 可代表姓名、项目名称、工作任务、工作类型中的任意一种if (StringUtils.isNotEmpty(search)) {Predicate p = cb.or(cb.like(root.get("employeeName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("busName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("projectName"), "%" + search + "%"));p = cb.or(p, cb.like(root.get("jobTypeName"), "%" + search + "%"));list.add(p);}// 去掉当前领导自己填报的但不由自己审批的数据。if (StringUtils.isNotEmpty(uid)) {Predicate a = cb.notEqual(root.get("approverId"), uid); // 非他审批Predicate b = cb.equal(root.get("employeeId"), uid);// 他填报list.add(cb.and(a, b).not());  // not 指取反,A && B 等价于 !A || !B}Predicate[] p = new Predicate[list.size()];return cb.and(list.toArray(p));}}, new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort()));return page;}

 

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

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

相关文章

将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

将你的前端应用打包成docker镜像并部署到服务器&#xff1f;仅需一个脚本搞定1.前言前段时间&#xff0c;自己搞了个阿里云的服务器。想自己在上面折腾&#xff0c;但是不想因为自己瞎折腾而污染了现有的环境。毕竟&#xff0c;现在的阿里云已经没有免费的快照服务了。要想还原…

CVPR2014: DeepID解读

上周五就要发的&#xff0c;拖........拖.......拖到现在&#xff0c;文中有不准确的地方&#xff0c;欢迎批评指正。DeepID是一种特征提取的算法&#xff0c;由港中文汤晓鸥团队于2014年提出&#xff0c;发表于CVPR2014。其应用领域是人脸识别的子领域——人脸验证&#xff0c…

成大事必备9种能力 9种手段 9种心态(图)

成大事必备9种能力 1、摆正心态&#xff0c;敢于面对现实 对于那些不停地抱怨现实恶劣的人来说&#xff0c;不能称心如意的现实&#xff0c;就如同生活的牢笼&#xff0c;既束缚手脚&#xff0c;又束缚身心&#xff0c;因此常屈从于现实的压力&#xff0c;成为懦弱者;而那些…

解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 情景描述&#xff1a;只是想简单写个 ActiveMQ 的小样&#xff0c;启动服务却报错&#xff1a; Error starting ApplicationContext…

【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)

图像的几何变换从原理上看主要包括两种&#xff1a;基于23矩阵的仿射变换&#xff08;平移、缩放、旋转和翻转等&#xff09;、基于33矩阵的透视变换。 仿射变换基本的图像变换就是二维坐标的变换&#xff1a;从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换&#xff1a; …

Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail

一、touch命令&#xff1a; 命令名称&#xff1a;touch 命令所在路径&#xff1a;/bin/touch 执行权限&#xff1a;所有用户 语法&#xff1a;touch [文件名] 功能描述&#xff1a;创建空文件 例子&#xff1a; touch leanring.file 说明&#xff1a;在当前目录下创建空文件l…

OpenCL 与 CUDA

根据网站资料&#xff0c;简单地汇编一下CUDA与OpenCL的区别。如有错误请指出。 题外话&#xff1a; 美国Sandia国家实验室一项模拟测试证明&#xff1a;由于存储机制和内存带宽的限制&#xff0c;16核、32核甚至64核处理器对于超级计算机来说&#xff0c;不仅不能带来性能提升…

DBMS (数据库管理系统) 是什么

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 数据库管理系统&#xff08;英语&#xff1a;database management system&#xff0c;缩写&#xff1a;DBMS&#xff09; 是一种针对对…

Eclipse4JavaEE安装SpringBoot

第一步&#xff1a;下载SpringBoot SpringBoot官网下载链接 第二步&#xff1a;在Eclipse里进行安装 打开Eclipse&#xff0c;菜单栏Help -》Install New Software&#xff0c;进入下图界面&#xff0c;点击Add 设置Name和Location&#xff0c;Name看自己喜好&#xff0c;Locat…

django中使用原生sql

django中使用原生sqlfrom django.db import connection cursor connection.cursor() cursor.execute("select * from xx where id1") row cursor.fetchone() users User.objects.raw("select * from user where namexx") for user in users: print(use…

从零开始玩转 logback、完整配置详解

官网地址&#xff1a;https://logback.qos.ch/manual/index.html 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 概述 LogBack是一个日志框架&#xff0c;它与Log4j可以说是同出一源&a…

Rust 编程 前言

虽然不是那么明显&#xff0c;但 Rust 程序设计语言的本质在于 赋能&#xff08;empowerment&#xff09;&#xff1a;无论你现在编写的是何种代码&#xff0c;Rust 能让你在更为广泛的编程领域走得更远&#xff0c;写出自信。 比如&#xff0c;“系统层面”&#xff08;“syst…

ffmpeg解码器优化

在以前的视频项目中&#xff0c;用到了几种商业版的H.264解码器。虽然性能稳定&#xff0c;支持DXVA或CUDA&#xff0c;在高清视频播放效果上不错&#xff0c;但是存在一个共同的缺陷-存在帧间延迟。经过我的测算&#xff0c;大概有3帧的缓冲延迟。当帧率在20fps以上时&#xf…

PHP 结合 Boostrap 结合 js 实现学生列表删除编辑以及搜索功能(完结)

这个自己的小项目要先告一段落了。可能还有许多bug。请见谅 删除学生功能 PHP: // 这里是通过前端代码HTML中的 url 传过来的&#xff0c;用 $_GET 来获取(相关HTML代码可以看一下到主页看一下前几条博客)if (empty($_GET[num])) exit(<h1>找不到您要删除的学生的学号<…

ActiveMQ_Windows版本的安装部署

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1, 保证电脑上安装了jdk6以上版本的java&#xff0c;并配置了好环境变量 &#xff1b; 2, 官方下载地址&#xff1a;http://activemq.a…

Java 自定义异常(转载)

1.异常的分类 1. 非运行时异常(Checked Exception) Java中凡是继承自Exception但不是继承自RuntimeException的类都是非运行时异常。 2. 运行时异常&#xff08;Runtime Exception/Unchecked Exception&#xff09; RuntimeException类直接继承自Exception类&#xff0c;称为运…

如何将markdown转换为wxml

话说我要为技术博客写一个小程序版&#xff0c;我的博客解决方案是 hexo github-page&#xff0c;格式当然是技术控们喜欢的 markdown 了 。但小程序使用的却是独有的模版语言 WXML。我总不能把之前的文章手动转换成小程序的 wxml 格式吧&#xff0c;而网上也没完善的转换库&a…

巧妙喝水打败多种疾病

喝水&#xff0c;我们每天都会做的一件事&#xff0c;殊不知&#xff0c;喝水得当能打败多种疾病问题! 方法/步骤 一、很多人都听说过早晨喝一杯水对身体有好处&#xff0c;有人喝盐水?有人喝蜂蜜水?还有人为了美白喝柠檬水?到底喝什么水最好呢?人体经过了一宿的代谢&…

git 几个commit点合并成一个commit点

在用git做版本控制器的时候&#xff0c;经常会遇到以下情况&#xff1a; 1、在做1个功能的时候&#xff0c;你自己觉得代码没问题了&#xff0c;就本地commit&#xff0c;然后提交代码&#xff0c;在gitlab上发起和并请求&#xff0c;老大看完之后&#xff0c;觉得你还有修改的…

JNDI 是什么

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JNDI : 简单理解&#xff0c;就是把固定的连接方式剥离出来&#xff0c;单独写在一个配置文件里。(下载.properties里面通过InputStream…