• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Springboot Hibernate+JPA 實現多條件動態查詢

    標簽: SpringDataJPA  動態查詢及分頁  spring boot  hibernate  jpa  java  

    首先需要在數據Repository接口中繼承JpaRepository,之后還需要繼承JpaSpecificationExecutor即可使用動態條件查詢

    持久層:

    @Repository
    public interface ObjectRepository extends JpaRepository<ObjectDto,Long>, JpaSpecificationExecutor<ObjectDto> {
    
    }
    

    業務層需要Specification類,重寫toPredicate方法,這里使用了lambda表達式:

    	@Override
        public List getRoutingInfo(ObjectDto param){
            List<ObjectDto> objList = objectRepository.findAll(
            (Root<ObjectDto> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder)->{
                Predicate p = criteriaBuilder.conjunction();
                if (StringUtils.isNotEmpty(param.getHechaHao())){
                    p = criteriaBuilder.and(p,criteriaBuilder.equal(root.get("hechaHao"),param.getHechaHao()));
                }
                if (StringUtils.isNotEmpty(param.getGlBianhao())){
                    p = criteriaBuilder.and(p,criteriaBuilder.like(root.<String>get("glBianhao"),"%"+param.getGlBianhao()+"%"));
                }
                if (!StringUtils.isEmpty(param.getGlDuanhao())){
                    p = criteriaBuilder.and(p,criteriaBuilder.like(root.<String>get("glDuanhao"),"%"+param.getGlDuanhao()+"%"));
                }
                return p;
            });
            return objList ;
        }
    

    Controller控制層使用get請求傳遞參數,使用對象接收。
    如果需要分頁的話,在findAll條件參數后,可以再加分頁參數Pageable。
    在這里插入圖片描述
    還有一種實現方式,使用EntityManager自己根據條件拼接SQL請見:https://blog.csdn.net/qq_43948440/article/details/110877496.

    版權聲明:本文為qq_43948440原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_43948440/article/details/111557411

    智能推薦

    SpringBoot 班級管理系統-->多條件查詢功能模塊 代碼開源 通用mapper Swagger UI

    項目結構 resources application.properties server.port=8080 server.port=8080 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/en004?useUnicode=true&...

    mybatis筆記-多條件動態查詢

    在操作中查詢某些數據,經常會出現根據不確定有幾個查詢條件來查詢一些數據,如下圖所示功能: 用戶可以選擇其中的任意某些字段或者都不選,這個時候我們的查詢語句該怎么寫呢。 其實很簡單,我們只需要寫一些動態的sql就可以實現這一功能。如下代碼,只需要在拼接查詢條件前,先用<if>是否為null,如果不為null則執行代碼時會把條件拼接在<where> 后 如果需要判斷傳過來的參數...

    蘋果M1芯片各種不支持,但居然可以刷朋友圈!你會買單嗎?

    上個月和大家一起分享過,最新的蘋果M1芯片上支持的各種開源軟件。什么?還沒讀過?趕緊點這里:一文解讀蘋果 M1 芯片電腦上的開源軟件。 現在已經過去了半個月,想必有不少的同學都已經入手了最新的蘋果M1芯片電腦。今天呢和大家來一起分享一個只有蘋果M1芯片電腦才有的福利喲~ 現在每個人的日常生活及工作中,基本都離不開微信,大多數同學都會在辦公時開一個網頁版微信,方便溝通交流(悄悄摸魚)。但是很多人喜歡...

    動態熱修復技術的實現

    原文地址為:動態熱修復技術的實現 項目地址:https://github.com/dodola/HotFix HotFix 安卓App熱補丁動態修復框架 介紹 該項目是基于QQ空間終端開發團隊的技術文章實現的,完成了文章中提到的基本功能。 文章地址:安卓App熱補丁動態修復技術介紹 項目部分代碼從 dalvik_patch 項目中修改而來,這個項目本來是用來實現multidex的,發現可以用來實現...

    初窺SpringSecurity安全框架

    文章目錄 概念 對應依賴 創建項目 自定義登陸用戶和密碼 新增SecurityConfig配置類 修改前臺配置 重啟項目驗證 登陸頁配置:記住我 退出的問題 作為一名開發怎能不知道大名頂頂的安全框架呢?市面上流行的安全框架有:shiro和springSecurity。那么你經常用哪個框架做安全訪問控制呢?因為SpringBoot集成了SpringSecurity,所以我們這次來聊聊它 概念 Spr...

    猜你喜歡

    數據結構(三)——基于數組的隊列和循環隊列

        隊Queue也是一個線性的存儲結構,原則是先入先出(FIFO),區別于棧的先進后出。就類似與排隊買票,先進入隊列的就先買票出列;入隊在一端操作(隊尾),出隊只能在另一端操作(隊首);     一個隊列的基本操作就是入隊,出隊,獲取隊列大小,判斷是否為空等等;這篇博客就是自己實現一個基于數組的隊列和循環隊列。 &...

    解決“Win 10 ipv6無網絡權限/無Internet連接權限”問題

    高校校園網有一個好處就是可以自由使用ipv6上各種BT、PT,然而ipv6由于商用不廣泛,各種ipv6解決方案不規范,導致各種使用問題。我最近遇到的問題:裝完Win 10后,已經換了hosts文件,為了上goole,問題是 ipv6就出現了無網絡權限。 經過試驗,發現核心解決方案,僅僅是使用CMD或者Windows Power Shell執行網絡配置命令即可:     &nbs...

    規則引擎QLExpress

    本文從官網總結而來,并在網上摘抄了幾個核心概念的解釋(比如強弱類型、動態靜態類型)。由于摘抄的比較雜亂,這里就不一一列舉原網站了,望諒解。 摘要 QLExpress與Groovy比較 QLExpress Groovy 解析型,編譯成自定義的內存指令 編譯形,產生一個獨立的class文件 表達式語言(EL expression language) 表達式語言(EL expression langua...

    05、隊列(queue):隊列在線程池等有限資源池中的應用

    05、|隊列(queue):隊列在線程池等有限資源池中的應用 5.1 如何理解“隊列”? 先進者先出,這就是典型的“隊列” 最基本的操作也是兩個: 入隊 enqueue(),放一個數據到隊列尾部; 出隊 dequeue(),從隊列頭部取一個元素。 實現: 用數組實現的隊列叫作順序隊列; 用鏈表實現的隊列叫作鏈式隊列。 隊列需要兩個指針: 一個是 he...

    【轉】WPF MVVM 循序漸進 (從基礎到高級) 【已翻譯100%】【2】

    原文地址:http://www.oschina.net/translate/wpf-mvvm-step-by-step-basics-to-advance-level?lang=chs&page=2# 上面的 command 代碼中,ViewModel 對象是通過構造函數傳遞進來。所以 ViewModel 類需要創建一個 command 對象來暴露這個對象的“ICommand&...

    精品国产乱码久久久久久蜜桃不卡