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.pswp.cn/news/448930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448930.shtml
英文地址,請注明出處:http://en.pswp.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…