Java?MyBatis實(shí)戰(zhàn)之QueryWrapper中and和or拼接技巧大全
一、引言
在Java Web開發(fā)中,MyBatis是一個(gè)非常流行的持久層框架。它通過XML或注解的方式將Java對象與數(shù)據(jù)庫表進(jìn)行映射,從而實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作。在使用MyBatis的過程中,經(jīng)常會遇到需要拼接復(fù)雜查詢條件的場景,這時(shí)候就需要使用到QueryWrapper這個(gè)強(qiáng)大的工具類。本文將詳細(xì)介紹如何在MyBatis的QueryWrapper中使用and和or進(jìn)行條件拼接,幫助大家更好地應(yīng)對實(shí)際項(xiàng)目中的各種需求。
二、QueryWrapper簡介
QueryWrapper是MyBatis提供的一個(gè)用于構(gòu)建查詢條件的類,它可以方便地實(shí)現(xiàn)各種復(fù)雜的查詢條件組合。QueryWrapper提供了豐富的方法,如eq(等于)、ne(不等于)、like(模糊查詢)、between(區(qū)間查詢)等,可以滿足各種查詢需求。同時(shí),QueryWrapper還支持and和or兩種邏輯運(yùn)算符,可以幫助輕松實(shí)現(xiàn)多條件組合查詢。
三、and運(yùn)算符的使用
1. and運(yùn)算符的基本用法
在QueryWrapper中,and運(yùn)算符用于連接兩個(gè)或多個(gè)查詢條件,表示這些條件都需要滿足。例如,想要查詢年齡大于18歲且性別為男的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 18).eq("gender", "male");
這里,gt("age", 18)
表示年齡大于18歲,eq("gender", "male")
表示性別為男。使用and運(yùn)算符將這兩個(gè)條件連接起來,表示同時(shí)滿足這兩個(gè)條件。
2. and運(yùn)算符鏈?zhǔn)秸{(diào)用
QueryWrapper支持鏈?zhǔn)秸{(diào)用,可以將多個(gè)查詢條件連接起來,使代碼更加簡潔。例如,想要查詢年齡在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)算符將這三個(gè)條件連接起來,表示同時(shí)滿足這三個(gè)條件。
3. and運(yùn)算符嵌套使用
有時(shí)候,需要在一個(gè)查詢條件中嵌套另一個(gè)查詢條件,這時(shí)候就可以使用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方法連接一個(gè)匿名內(nèi)部類實(shí)現(xiàn)的年齡范圍查詢條件。注意,這里的and方法是靜態(tài)方法,可以直接調(diào)用。
四、or運(yùn)算符的使用
or運(yùn)算符用于連接兩個(gè)或多個(gè)查詢條件,表示其中一個(gè)條件滿足即可。例如,想要查詢年齡小于18歲或性別為男的所有用戶,可以使用如下代碼:
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lt("age", 18).or().eq("gender", "male");
這里,使用了兩次or方法來實(shí)現(xiàn)兩個(gè)條件的or關(guān)系。第一次or方法將年齡小于18歲的條件添加到QueryWrapper中,第二次or方法將性別為男的條件添加到QueryWrapper中。需要注意的是,or方法只能用于非空的集合類型參數(shù),所以在這里將or方法鏈?zhǔn)秸{(diào)用了兩次。如果只有一個(gè)非空的集合類型參數(shù),只需要調(diào)用一次or方法即可。
附:QueryWrapper中or和and并列使用
目的:想要實(shí)現(xiàn)一個(gè)sql中 某倆個(gè)字段是or的關(guān)系,其他字段查詢是并列的關(guān)系。
實(shí)際:
1、如果直接使用or 和and ,and會作為一個(gè)整體條件,與or并列,查詢出來的結(jié)果就不是我們想要的
2、可以把or里面的條件包起來,那么or里的就作為一個(gè)整體,和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ù)雜的查詢條件組合,這時(shí)候可以通過閱讀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)文章
使用OkHttp3以Multipart/Form-Data方式上傳文件方式
在開發(fā)過程中,使用multipart/form-data進(jìn)行圖片上傳是一個(gè)常見的需求,本文通過一個(gè)實(shí)際案例,講解了如何在項(xiàng)目中添加OkHttp3庫依賴,并使用multipart/form-data進(jìn)行圖片上傳,首先,介紹了ContentType的概念和常見類型2024-10-10Spring Boot 實(shí)現(xiàn)程序的優(yōu)雅退出(詳細(xì)步驟)
Spring Boot 為我們提供了優(yōu)雅退出的功能,使應(yīng)用程序能夠在關(guān)閉時(shí)正常處理完所有當(dāng)前請求,避免請求被中斷導(dǎo)致數(shù)據(jù)丟失或不一致等問題,本文將全面介紹如何在 Spring Boot 應(yīng)用程序中實(shí)現(xiàn)優(yōu)雅退出,感興趣的朋友跟隨小編一起看看吧2024-03-03關(guān)于阿里巴巴TransmittableThreadLocal使用解讀
文章主要介紹了三種ThreadLocal的使用:ThreadLocal、InheritableThreadLocal和TransmittableThreadLocal,ThreadLocal和InheritableThreadLocal在單線程和部分情況下可以正常工作,但TransmittableThreadLocal在處理線程池時(shí)表現(xiàn)更佳2025-02-02