• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • spring data jpa使用Pageable,ExampleMatcher進行分頁多條件查詢

    標簽: 多條件查詢  Pageable  Example  ExampleMat

    一般簡單的查詢,可以使用,findByName,findById等方法,但是當這種方法越來越多的時候,就會顯得特別冗雜,這個時候就需要把方法進行合并,spring data jpa提供了一種Query by Example的方法。

    1. 當僅使用簡單查詢的時候
    @Override
    public Page queryByPage(T t, Pageable pageable) {
        Example<T> example = Example.of(t);
        return baseDao.findAll(example, pageable);
    }

    這種查詢會將實體中所有不為空的屬性(包括父類的)都作為查詢條件

    SELECT roleentity0_.id AS id1_7_, roleentity0_.delete_flag AS delete_f2_7_, roleentity0_.system_id AS system_i3_7_, roleentity0_.create_time AS create_t4_7_, roleentity0_.create_user_id AS create_u5_7_, roleentity0_.update_time AS update_t6_7_, roleentity0_.update_user AS update_u7_7_, roleentity0_.content AS content8_7_, roleentity0_.org_id AS org_id9_7_, roleentity0_.role_name AS role_na10_7_, roleentity0_.role_type AS role_ty11_7_, roleentity0_.weight AS weight12_7_
    FROM dafangzi_role roleentity0_
    WHERE roleentity0_.update_time=? AND roleentity0_.create_time=? AND roleentity0_.delete_flag=?
    ORDER BY roleentity0_.update_time DESC
    LIMIT ?
    1. 上述內容可以看到,由于修改時間和創建時間有默認值,也當成了查詢條件,這并不是我們想要的,于是做出修改如下,
    @Override
    public Page queryByPage(T t, Pageable pageable) {
        //Example<T> example = Example.of(t);
        ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("createTime", "updateTime");
        Example<T> example = Example.of(t, matcher);
        return baseDao.findAll(example, pageable);
    }

    再查看查詢結果,就是我們想要的結果了

    SELECT roleentity0_.id AS id1_7_, roleentity0_.delete_flag AS delete_f2_7_, roleentity0_.system_id AS system_i3_7_, roleentity0_.create_time AS create_t4_7_, roleentity0_.create_user_id AS create_u5_7_, roleentity0_.update_time AS update_t6_7_, roleentity0_.update_user AS update_u7_7_, roleentity0_.content AS content8_7_, roleentity0_.org_id AS org_id9_7_, roleentity0_.role_name AS role_na10_7_, roleentity0_.role_type AS role_ty11_7_, roleentity0_.weight AS weight12_7_
    FROM dafangzi_role roleentity0_
    WHERE roleentity0_.delete_flag=?
    ORDER BY roleentity0_.update_time DESC
    LIMIT ?
    1. 但是有很多時候我們查詢的時候是需要模糊查詢的,這個時候需要再次對需要模糊查詢的字段進行特殊的處理
    ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("createTime", "updateTime").withMatcher("roleName", match -> match.contains());
    Example<RoleEntity> example = Example.of(roleEntity, matcher);
    Page<RoleEntity> entityPage = roleService.queryByPage(example, PageRequest.of(page-1, limit, sort));

    這樣,就變成模糊查詢了

    SELECT roleentity0_.id AS id1_7_, roleentity0_.delete_flag AS delete_f2_7_, roleentity0_.system_id AS system_i3_7_, roleentity0_.create_time AS create_t4_7_, roleentity0_.create_user_id AS create_u5_7_, roleentity0_.update_time AS update_t6_7_, roleentity0_.update_user AS update_u7_7_, roleentity0_.content AS content8_7_, roleentity0_.org_id AS org_id9_7_, roleentity0_.role_name AS role_na10_7_, roleentity0_.role_type AS role_ty11_7_, roleentity0_.weight AS weight12_7_
    FROM dafangzi_role roleentity0_
    WHERE (roleentity0_.role_name LIKE ?) AND roleentity0_.delete_flag=?
    ORDER BY roleentity0_.update_time DESC
    LIMIT ?

    附其它字符串處理的操作
    這里寫圖片描述
    參考鏈接:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

    更多有趣,好玩的信息請關注我的微信公眾號!

    這里寫代碼片
    `

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

    智能推薦

    spring data jpa使用

    springboot啟動類上加@EnableJpaRepositories,開啟jpa實現自定義的擴展接口, @EnableJpaRepositories(basePackages = {"com.example.demo","com"},repositoryImplementationPostfix = "Impl") 框架會自動搜索b...

    spring data jpa 實現多條件復雜查詢及多表聯查

    最近發現JPA在處理單表時,很方便,但多表就比較復雜了。今天寫一下端午這兩天琢磨的多條件查詢,還有多表聯查。 文章比較長,大部分都是代碼,不愿意看的代碼copy下去,直接可以實現;想交流的可以看完,然后留言交流。 maven依賴啊,配置,繼承寫法等知識點不展開說了,之前寫過一篇文章: spring boot 配置及使用 spring data jpa 這里說一下更新的地方: JPA的配置 說一點,...

    Spring Data JPA多表查詢

    多表查詢在Spring Data JPA中有兩種實現方式 第一種創建一個結果集接口來接收多表連查的結果 第二種利用JPA的關聯映射來實現 先來熟悉一下幾個注解 注解 意思 屬性 @ManyToOne 定義了連接表之間的多對一的關系。 targetEntity屬性表示關聯的實體類型,可省略,fetch屬性表示加載策略,FetchType的取值范圍LAZY(延遲加載)默認上EAGER,cascade屬...

    Spring Data Jpa --- 入門

    一、概述 Spring Data是Spring下的一個子項目,用于簡化數據庫訪問,并支持云服務的開源框架。Spring Data支持NoSQL和 關系數據存儲,其主要目標是使得數據庫的訪問變得方便快捷。并支持map-reduce框架和云計算數據服務。對于擁有海量數據的項目,可以用Spring Data來簡化項目的開發。 然而針對不同的數據儲存訪問使用相對的類庫來操作訪問。Spring D...

    Spring data jpa 梳理

    2019獨角獸企業重金招聘Python工程師標準>>> 一直搞不懂棟哥的各種EQ啊EXIST啊什么的,說實話,我非常討厭數據庫和sql... 但是,逃不掉的,必須要看懂了 /(ㄒoㄒ)/~~ 繼承關系 先來一張圖 首先,我們需要繼承以加入框架 service repo service 和 repo 層的代碼幾乎什么都不用寫。 場景 這里來看一次分頁的過程。 UserService...

    猜你喜歡

    Redis

    概念: 一款高性能的NoSql系列的非關系型數據庫 優點: 速度快:純內存操作,Redis 的性能非常出色,每秒可以處理超過 10 萬次讀寫操作,是已知性能最快的 Key-Value 數據庫。 支持豐富數據類型:字符串(String)、字符串列表(List)、字符串集合(Set)、有序字符串集合(Sorted Set)、哈希(Hash)。 豐富的特性:訂閱發布 Pub / Sub 功能、Key 過...

    Java設計模式-命令模式

    15、命令模式 命令模式就是將“動作的請求者”從“動作的執行者”對象中解耦。 具體示例:遙控器可以操控多個電器,每個電器有開和關兩個按鈕(分別對應開和關命令)。 UML類圖: Java代碼:...

    NIO 非網絡通信基礎歸納

    一、Java NIO 簡介      Java NIO:(non-blocking IO 或 New IO)與原有的 IO 有同樣的作用和目的,但是使用的方式完全不同,NIO 支持面向緩沖區的、基于通道的 IO 操作。NIO 將以更加高效的方式進行文件讀寫操作。為所有的原始類型(boolean類型除外)提供緩存支持的數據容器,使用它可以提供非阻塞式的高伸縮性...

    探索Java8——CompletableFuture: 組合式異步編程

    文章目錄 Future接口 Future接口的局限性 使用 CompletableFuture 使用并行流對請求進行并行操作 使用 CompletableFuture 發起異步請求 如果你的意圖是實現并發,而非并行,或者你的主要目標是在同一個CPU上執行幾個松耦合的任務,充分利用CPU的核,讓其足夠忙碌,從而最大化程序的吞吐量,那么你其實真正想做的是避免因為等待遠程服務的返回,或者對數據庫的查詢,...

    【譯】自己動手寫Django app,第二部分【完】

    2019獨角獸企業重金招聘Python工程師標準>>> 原文地址:https://docs.djangoproject.com/en/1.4/intro/tutorial02/ 這個教程從教程一留下的東西開始的。我們繼續網絡調查應用程序同時我們將會關注Django的自動生成的管理站點。 (哲學:為你的員工或者客戶生成增加,修改或刪除內容的站點是一個枯燥無味的工作,因為這不需要太多...

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