Mybatis Plus LambdaQueryWrapper的具體用法
前言
為了更方便的實(shí)現(xiàn)動態(tài) SQL,Mybatis Plus 在其基礎(chǔ)上擴(kuò)展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加簡便的查詢語法
,同時也避免了 SQL 注入
的風(fēng)險。
LambdaQueryWrapper 實(shí)現(xiàn)了 QueryWrapper
的全部功能,并提供了基于 Lambda
表達(dá)式的查詢方式,使得查詢語法更加優(yōu)雅。使用 LambdaQueryWrapper,可以方便的實(shí)現(xiàn)各種查詢條件的拼接,如 where
、and
、or
、in
、like
、between
等條件。
LambdaQueryWrapper 通過函數(shù)式編程的方式,提供了多種方法用于實(shí)現(xiàn)各種查詢條件的拼接
,這些方法包括 eq、ne、gt、ge、lt、le、in、notIn、like、notLike、between、notBetween、isNull、isNotNull 等。
與QueryWrapper對比
LambdaQueryWrapper 和 QueryWrapper 都是 Mybatis Plus 中的查詢條件封裝類,其中 LambdaQueryWrapper 是基于 Lambda 表達(dá)式的實(shí)現(xiàn),而 QueryWrapper 是基于字符串
的實(shí)現(xiàn)。它們的優(yōu)缺點(diǎn)如下:
LambdaQueryWrapper 優(yōu)點(diǎn)
- 代碼簡潔,易讀易寫,使用 Lambda 表達(dá)式可
避免手寫字符串
的繁瑣
和容易出錯
; - 類型安全,LambdaQueryWrapper 在
編譯期間就能夠捕獲類型錯誤
,避免運(yùn)行時出現(xiàn)類型錯誤
; - 更加靈活,LambdaQueryWrapper
支持鏈?zhǔn)秸{(diào)用
,支持多個條件之間的 and 和 or 關(guān)系組合,支持子查詢等復(fù)雜查詢操作。
LambdaQueryWrapper 缺點(diǎn)
- LambdaQueryWrapper 基于 Lambda 表達(dá)式實(shí)現(xiàn),
可能存在一些性能問題
,在大數(shù)據(jù)量查詢時可能會影響查詢性能。
QueryWrapper 優(yōu)點(diǎn)
- 在少量數(shù)據(jù)查詢時,QueryWrapper 通常比 LambdaQueryWrapper 更快,因?yàn)樗?code>不需要解析 Lambda 表達(dá)式;
- QueryWrapper 更加靈活,可以使用字符串直接拼接 SQL,
支持 SQL 函數(shù)等更多高級查詢操作
; - 對于老舊代碼,QueryWrapper 更加
適合兼容
和擴(kuò)展
。
QueryWrapper 缺點(diǎn)
- 代碼可讀性和可維護(hù)性較差,
手寫 SQL 字符串容易出錯
,并且不易于維護(hù)
和修改
; - 使用字符串拼接 SQL,
容易受到 SQL 注入攻擊
,需要特別注意防范
; 編譯期不能捕獲類型錯誤
,需要在運(yùn)行時才能發(fā)現(xiàn)類型錯誤。
綜上推薦使用 LambdaQueryWrapper(此外,LambdaQueryWrapper 還具有良好的兼容性和擴(kuò)展性,可以輕松適應(yīng)不同的業(yè)務(wù)需求,提高開發(fā)效率和代碼質(zhì)量)。
案例
簡單查詢
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getUsername, "張三") .and(w -> w.between(User::getAge, 18, 30) .or().eq(User::getGender, 1)) .orderByDesc(User::getCreateTime); List<User> userList = userMapper.selectList(wrapper);
首先創(chuàng)建了一個 LambdaQueryWrapper 對象,然后通過 eq 方法添加一個等于條件,表示查詢用戶名為“張三”的用戶。接著,使用 and 方法添加一個條件組,該組包含了一個 between 條件和一個 or 條件,分別表示查詢年齡在 18 到 30 之間的用戶,或者查詢性別為 1 的用戶。注意,條件組中的多個條件之間默認(rèn)是 and 的關(guān)系,可以通過 or 方法切換為 or 的關(guān)系。最后,使用 orderByDesc 方法對查詢結(jié)果進(jìn)行排序,按照創(chuàng)建時間倒序排列。
使用 LambdaQueryWrapper 進(jìn)行查詢時,還可以通過 select 方法來自定義查詢字段,從而實(shí)現(xiàn)對查詢結(jié)果的靈活控制。
select
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getAge, 20) .select(User::getId, User::getUserName, User::getAge); List<User> userList = userMapper.selectList(wrapper);
首先通過 LambdaQueryWrapper 對象創(chuàng)建了一個查詢條件,然后使用 eq
方法添加了一個等于條件
,表示查詢年齡為 20 的用戶。接著,通過 select 方法來自定義查詢字段,只查詢 id、username、age 三個字段,這些字段是以逗號分隔的字符串形式傳入的。最后,調(diào)用 selectList 方法執(zhí)行查詢操作,得到查詢結(jié)果。
到此這篇關(guān)于Mybatis Plus LambdaQueryWrapper的具體用法的文章就介紹到這了,更多相關(guān)Mybatis Plus LambdaQueryWrapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用Spring發(fā)送郵件的實(shí)現(xiàn)代碼
本篇文章主要介紹了使用Spring發(fā)送郵件的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03詳解自動注冊Gateway網(wǎng)關(guān)路由配置
這篇文章主要為大家介紹了自動注冊Gateway網(wǎng)關(guān)路由配置的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03ZooKeeper框架教程Curator分布式鎖實(shí)現(xiàn)及源碼分析
本文是ZooKeeper入門系列教程,本篇為大家介紹zookeeper一個優(yōu)秀的框架Curator,提供了各種分布式協(xié)調(diào)的服務(wù),Curator中有著更為標(biāo)準(zhǔn)、規(guī)范的分布式鎖實(shí)現(xiàn)2022-01-01java實(shí)現(xiàn)兩個線程交替打印的實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于java實(shí)現(xiàn)兩個線程交替打印的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們參考下。2019-12-12springboot集成elasticsearch7的圖文方法
本文記錄springboot集成elasticsearch7的方法,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-05-05Springcloud中的region和zone的使用實(shí)例
這篇文章主要介紹了Springcloud中的region和zone的使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包
在項(xiàng)目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨(dú)封裝成一個第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時,卻提示找不到對應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法2022-10-10