Mybatis?Plus?QueryWrapper復(fù)合用法詳解
QueryWrapper復(fù)合用法
Mybatis Plus作為一個(gè)強(qiáng)大的msql插件,簡(jiǎn)化了DAO許多操作,使得我們的代碼看上去更加優(yōu)雅一些;
這里主要記錄一下QueryWrapper的復(fù)雜查詢(xún)用法
LambdaQueryWrapper<T> queryWrapper = new QueryWrapper<T>().lambda(); queryWrapper.eq(DTO::gexxx, param); queryWrapper.and(wrapper -> wrapper .eq(T::getxxx, param) .or() .like(T::getxxx, param));
使用QueryWrapper小結(jié)
mybatisplus自定義分頁(yè)查詢(xún)
接口:
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //實(shí)現(xiàn)類(lèi) ?public PageList pageQuery(PageArgument pageArgument) ?{ ? ? ? ? //放入查詢(xún)參數(shù) ? ? ? ? QueryWrapper queryWrapper=new ?QueryWrapper (); ? ? ? ? //注意放入?yún)?shù)格式,關(guān)聯(lián)查詢(xún)要寫(xiě)別名 ? ? ? ? queryWrapper.eq(StringUtils.isNotBlank(user.getId()), "b.id",user.getId()); ? ? ?? ? ? ? ? Page page = new Page(); ? ? ? ? IPage<TestUser> temp = testMapper.pageQueryBaseline(new Page<TestUser>(pageArgument.getPage(), pageArgument.getRows()), queryWrapper); ? ? ? ? PageList pageList = new PageList(); ? ? ? ? pageList.setTotal(temp.getTotal()); ? ? ? ? pageList.setPageNum(pageArgument.getPage()); ? ? ? ? pageList.setPageSize(pageArgument.getRows()); ? ? ? ? pageList.setList(temp.getRecords()); ? ? ? ? return pageList; } --------------------------------------------------------------------------- //Mapper接口 @Mapper public interface TestMapper extends BaseMapper<TestUser> { ? ? <E extends IPage<TestUser>> E pageQueryTestUser(E page, @Param(Constants.WRAPPER) Wrapper<TestUser> queryWrapper); } -------------------------------------------------------------------------- sql自定義: ?<!-- 分頁(yè)查詢(xún)--> ? ? <select id="pageQueryTestUser" resultType="TestUser"> ? ? ? ? ? ? select b.* from TestUser b ? ? ? ? ? ? inner join TestStudent ?i on i.id=b.id ?${ew.customSqlSegment} ? ? </select>
其中ew.customSqlSegment
對(duì)應(yīng)條件構(gòu)造器queryWrapper里的條件,會(huì)在sql中自動(dòng)拼接,不需要在sql中再寫(xiě)判斷條件userId=#{userId}這樣的。
QueryWrapper 設(shè)置參數(shù)幾種格式
queryWrapper.eq(“userid”,“aa”); //相當(dāng)于userid=#{userid} queryWrapper.like(“userid”,“aa”); //相當(dāng)于模糊查詢(xún) queryWrapper.eq(StringUtils.isNotBlank(user.getId()), “b.id”,user.getId()); //先判斷這個(gè)參數(shù)是不是空,為空則不放入,不為空則放入?yún)?shù) queryWrapper.isNull(“userid”) //相當(dāng)于where userid is null
有關(guān)queryWrapper使用or條件時(shí)
把or條件單獨(dú)隔離,不影響后邊的條件
import java.util.function.Consumer; ?QueryWrapper queryWrapper = new QueryWrapper(); ? ?Consumer<QueryWrapper> consumer = qw -> { ? ? ? ? ? ? ? ? qw.eq("module", "b管理"); ? ? ? ? ? ? ? ? qw.or(); ? ? ? ? ? ? ? ? qw.eq("module", "a管理"); ? ? ? ? ? ? }; queryWrapper.and(consumer); queryWrapper.eq("name", "123");
這樣拼接出來(lái)的條件就是,Consumer就相當(dāng)于一個(gè)括號(hào)把or條件獨(dú)立了
where (module=‘a(chǎn)管理' or module=‘b管理') and name='123'
不用Consumer直接用.or(),就會(huì)導(dǎo)致條件變成這樣:
where module=a管理' or module=‘b管理' and name=‘123' or后邊是—> module=‘b管理' and name=‘123'
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
常用Maven庫(kù),鏡像庫(kù)及maven/gradle配置(小結(jié))
這篇文章主要介紹了常用Maven庫(kù),鏡像庫(kù)及maven/gradle配置(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12詳解Java?ReentrantReadWriteLock讀寫(xiě)鎖的原理與實(shí)現(xiàn)
ReentrantReadWriteLock讀寫(xiě)鎖是使用AQS的集大成者,用了獨(dú)占模式和共享模式。本文和大家一起理解下ReentrantReadWriteLock讀寫(xiě)鎖的實(shí)現(xiàn)原理,需要的可以了解一下2022-10-10Springboot mybatis常見(jiàn)配置問(wèn)題解決
這篇文章主要介紹了Springboot mybatis常見(jiàn)配置問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11詳解Spring Boot中使用@Scheduled創(chuàng)建定時(shí)任務(wù)
本篇文章中主要介紹了Spring Boot中使用@Scheduled創(chuàng)建定時(shí)任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器
本文主要介紹了Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07