Java?MyBatis實(shí)戰(zhàn)之QueryWrapper中and和or拼接技巧大全
一、引言
在Java Web開發(fā)中,MyBatis是一個非常流行的持久層框架。它通過XML或注解的方式將Java對象與數(shù)據(jù)庫表進(jìn)行映射,從而實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作。在使用MyBatis的過程中,經(jīng)常會遇到需要拼接復(fù)雜查詢條件的場景,這時候就需要使用到QueryWrapper這個強(qiáng)大的工具類。本文將詳細(xì)介紹如何在MyBatis的QueryWrapper中使用and和or進(jìn)行條件拼接,幫助大家更好地應(yīng)對實(shí)際項(xiàng)目中的各種需求。
二、QueryWrapper簡介
QueryWrapper是MyBatis提供的一個用于構(gòu)建查詢條件的類,它可以方便地實(shí)現(xiàn)各種復(fù)雜的查詢條件組合。QueryWrapper提供了豐富的方法,如eq(等于)、ne(不等于)、like(模糊查詢)、between(區(qū)間查詢)等,可以滿足各種查詢需求。同時,QueryWrapper還支持and和or兩種邏輯運(yùn)算符,可以幫助輕松實(shí)現(xiàn)多條件組合查詢。
三、and運(yùn)算符的使用
1. and運(yùn)算符的基本用法
在QueryWrapper中,and運(yùn)算符用于連接兩個或多個查詢條件,表示這些條件都需要滿足。例如,想要查詢年齡大于18歲且性別為男的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18).eq("gender", "male");
這里,gt("age", 18)表示年齡大于18歲,eq("gender", "male")表示性別為男。使用and運(yùn)算符將這兩個條件連接起來,表示同時滿足這兩個條件。
2. and運(yùn)算符鏈?zhǔn)秸{(diào)用
QueryWrapper支持鏈?zhǔn)秸{(diào)用,可以將多個查詢條件連接起來,使代碼更加簡潔。例如,想要查詢年齡在18到30歲之間、性別為女的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18).lt("age", 30).eq("gender", "female");
這里,ge("age", 18)表示年齡大于等于18歲,lt("age", 30)表示年齡小于等于30歲。使用and運(yùn)算符將這三個條件連接起來,表示同時滿足這三個條件。
3. and運(yùn)算符嵌套使用
有時候,需要在一個查詢條件中嵌套另一個查詢條件,這時候就可以使用and運(yùn)算符。例如,想要查詢姓名為張三且年齡在25到35歲之間的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "張三").and(i -> i.ge("age", 25).lt("age", 35));
這里,使用了lambda表達(dá)式來實(shí)現(xiàn)嵌套的and條件。首先使用eq方法設(shè)置姓名為張三的條件,然后使用and方法連接一個匿名內(nèi)部類實(shí)現(xiàn)的年齡范圍查詢條件。注意,這里的and方法是靜態(tài)方法,可以直接調(diào)用。
四、or運(yùn)算符的使用
or運(yùn)算符用于連接兩個或多個查詢條件,表示其中一個條件滿足即可。例如,想要查詢年齡小于18歲或性別為男的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18).or().eq("gender", "male");
這里,使用了兩次or方法來實(shí)現(xiàn)兩個條件的or關(guān)系。第一次or方法將年齡小于18歲的條件添加到QueryWrapper中,第二次or方法將性別為男的條件添加到QueryWrapper中。需要注意的是,or方法只能用于非空的集合類型參數(shù),所以在這里將or方法鏈?zhǔn)秸{(diào)用了兩次。如果只有一個非空的集合類型參數(shù),只需要調(diào)用一次or方法即可。
附:QueryWrapper中or和and并列使用
目的:想要實(shí)現(xiàn)一個sql中 某倆個字段是or的關(guān)系,其他字段查詢是并列的關(guān)系。
實(shí)際:
1、如果直接使用or 和and ,and會作為一個整體條件,與or并列,查詢出來的結(jié)果就不是我們想要的

2、可以把or里面的條件包起來,那么or里的就作為一個整體,和and的數(shù)據(jù)并列

3.那么在QueryWrapper中如何用代碼實(shí)現(xiàn)呢?如圖
QueryWrapper<GgsyxtKtzry> qw = new QueryWrapper<>();
qw.lambda().eq(GgsyxtKtzry::getScbj, 0)
.and(wreapper->{
wreapper.eq(GgsyxtKtzry::getZh, updateVO.getZh())
.or().eq(GgsyxtKtzry::getLxdh, updateVO.getLxdh());
})
.ne(GgsyxtKtzry::getUuid, updateVO.getUuid());
總結(jié)與展望
本文詳細(xì)介紹了如何在MyBatis的QueryWrapper中使用and和or進(jìn)行條件拼接,幫助大家更好地應(yīng)對實(shí)際項(xiàng)目中的各種需求。在實(shí)際開發(fā)中,可能還會遇到其他更復(fù)雜的查詢條件組合,這時候可以通過閱讀MyBatis官方文檔或參考其他優(yōu)秀博客文章來學(xué)習(xí)更多的技巧和方法。希望本文能對大家有所幫助,祝大家在編程路上越走越遠(yuǎn)!
到此這篇關(guān)于Java MyBatis實(shí)戰(zhàn)之QueryWrapper中and和or拼接技巧大全的文章就介紹到這了,更多相關(guān)MyBatis QueryWrapper中and和or拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
搭建Springboot框架并添加JPA和Gradle組件的方法
這篇文章主要介紹了搭建Springboot框架并添加JPA和Gradle組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
使用Jenkins一鍵打包部署SpringBoot項(xiàng)目的步驟詳解
任何簡單操作的背后,都有一套相當(dāng)復(fù)雜的機(jī)制,本文將以SpringBoot應(yīng)用的在Docker環(huán)境下的打包部署為例,詳細(xì)講解如何使用Jenkins一鍵打包部署SpringBoot應(yīng)用,文中通過圖文結(jié)合講解的非常詳細(xì),需要的朋友可以參考下2023-11-11
詳解spring boot實(shí)現(xiàn)websocket
這篇文章主要介紹了詳解spring boot實(shí)現(xiàn)websocket,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
利用Java實(shí)現(xiàn)一個WAV文件信息解析與打印工具
在日常音頻處理工作中,我們經(jīng)常會遇到各種音頻文件格式,其中最經(jīng)典的無損音頻格式之一就是 WAV,所以本文將分享一個純 Java 實(shí)現(xiàn)的 WAV 文件信息解析工具,能夠從文件頭到數(shù)據(jù)塊完整打印 WAV 文件信息,需要的朋友可以參考下2025-11-11
java工具類SendEmailUtil實(shí)現(xiàn)發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了java工具類SendEmailUtil實(shí)現(xiàn)發(fā)送郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
idea統(tǒng)計代碼行數(shù)Statistic的步驟詳解
這篇文章主要介紹了idea統(tǒng)計代碼行數(shù)Statistic的步驟詳解,本文通過使用Statistic插件操作的,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
java項(xiàng)目idea構(gòu)建總是報內(nèi)存溢出怎么解決詳析
這篇文章主要介紹了java項(xiàng)目idea構(gòu)建總是報內(nèi)存溢出怎么解決的相關(guān)資料,方法包括增加IDEA內(nèi)存分配、調(diào)整項(xiàng)目編譯設(shè)置、配置Gradle構(gòu)建內(nèi)存、優(yōu)化項(xiàng)目結(jié)構(gòu)、清理不必要的依賴、使用命令行構(gòu)建、更新IDEA和JDK、清理IDEA緩存和禁用不必要的插件,需要的朋友可以參考下2025-03-03
關(guān)于protected修飾符詳解-源于Cloneable接口
這篇文章主要介紹了protected修飾符詳解-源于Cloneable接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

