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