Java Lambda Query Wrapper:一款高效實用的查詢構建工具

一、介紹

Java Lambda Query Wrapper(簡稱JLQ),是一款基於MyBatis-Plus的查詢構建工具,通過Lambda 表達式,優雅地構建出類型安全的 SQL 查詢條件。

JLQ 實現了基本的查詢操作,支持多表關聯查詢,還可以通過 join、groupBy、having、orderBy 等語句實現更多的複雜查詢功能。

相較於MyBatis-Plus本身的Wrapper,JLQ的Lambda查詢方式更加方便快捷,同時支持與 MyBatis-Plus 的使用相同的操作方式。

二、為什麼要使用JLQ

MyBatis-Plus封裝了很多的查詢條件構建器(Wrapper),但是在使用過程中,需要傳入字元串類型的查詢條件,容易產生打錯字元、類型不對等問題。

而JLQ使用Lambda表達式作為查詢條件,避免了構建查詢條件時發生的類型錯誤。

另外,JLQ支持多表關聯查詢,免去了手寫SQL的繁瑣,同時在查詢操作時也能實現類型安全。

最重要的是,JLQ在性能上比手寫的SQL語句具有更高的執行效率。因為JLQ是基於MyBatis-Plus的查詢構建器,使用了MyBatis-Plus本身的高效查詢邏輯。

三、如何使用JLQ

JLQ的使用方法很簡單,只需要在依賴中添加相關的Jar包,然後就可以愉快地使用了。

下面,我們舉一個簡單的例子來介紹JLQ的基本使用方法:

//實例化查詢構建器
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();

//設置查詢條件
lambdaQueryWrapper.like(User::getUsername,"admin")
                 .ge(User::getAge,18);

//執行查詢語句
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

上述代碼實現了 「查詢用戶名中包含admin且年齡大於等於18歲的用戶」 的動態 SQL 操作,在Lambda表達式中,使用了 User::getUsername 和 User::getAge 來代替了字元串類型的欄位名,避免了因為打錯字元或者主/副表別名不對而導致的查詢失敗。

四、JLQ高級用法

如果只是用JLQ來實現基本的查詢操作,那麼其實用處並不大,而JLQ的高級用法則具有更加強大的功能。

1、多表關聯查詢

在查詢中,經常需要使用多表關聯來查出需要的數據,而JLQ則支持非常簡單的語法來實現多表關聯查詢,如下所示:

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.table("user")
                 .leftJoin("user_role",UserRole::getUserId, User::getId)
                 .eq(UserRole::getRoleId,roleId);

List<User> userList = userMapper.selectList(lambdaQueryWrapper);

通過 table() 方法指定主表名,然後通過 leftJoin() 方法指定關聯表和關聯條件。查詢語句會生成如下的 SQL 語句:

SELECT
    user.*
FROM
    user
LEFT JOIN user_role ON user_role.user_id = user.id
WHERE
    user_role.role_id = ?

2、複雜查詢語句

有時候需要查詢的條件非常複雜,使用MyBatis-Plus本身提供的 wrapper 無法解決時,可以使用LambdaQueryWrapper代替SQL語句直接構建查詢條件。

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.apply(aggregationCondition, null)
                 .eq(User::getEnabled, true);

List<User> userList = userMapper.selectList(lambdaQueryWrapper);

上述代碼中,apply() 方法實現了一段複雜的查詢語句,查詢語句會生成如下的 SQL 語句:

SELECT
    *
FROM
    user
WHERE
    (select count(*) from user_role where user_role.user_id = user.id) > ?
AND user.enabled = true

3、通過entity屬性查詢

使用同一個Entity實現查詢操作時,可以通過 entity 屬性來進行查詢,如下所示:

User user = new User();
user.setUsername("admin");
user.setAge(18);
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(user);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

上述代碼將一個 User 實例傳入 LambdaQueryWrapper 構造器中,JLQ會根據 User 的屬性進行查詢,生成如下的 SQL 語句:

SELECT
    *
FROM
    user
WHERE
    username = ?
AND age = ?

五、總結

Java Lambda Query Wrapper(JLQ)作為 MyBatis-Plus 的查詢構建工具,可以很好地解決在 MyBatis-Plus 中使用 MyBatis Mapper 而經常遇到的查詢構建器(Wrapper)類型錯誤的問題。

同時,JLQ還支持在構建查詢條件時使用Lambda表達式,減少了手寫 SQL 的繁瑣,提高了執行效率。

總體來說,JLQ是一個非常優秀的 MyBatis-Plus 的擴展功能,令代碼維護更加方便,代碼可讀性也更高。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297117.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-27 13:20
下一篇 2024-12-28 12:15

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論