【Java】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 更快,因為它
不需要解析 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é)果的靈活控制。文章來源:http://www.zghlxwxcb.cn/news/detail-701670.html
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é)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-701670.html
到了這里,關(guān)于【Java】Mybatis Plus LambdaQueryWrapper梳理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!