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)文章
Spring Data Redis對(duì)象緩存序列化問(wèn)題解決
相信在項(xiàng)目中,你一定是經(jīng)常使用Redis,在使用時(shí),有沒(méi)有遇到同我一樣,對(duì)象緩存序列化問(wèn)題的呢,本文主要介紹了Spring Data Redis對(duì)象緩存序列化問(wèn)題解決,感興趣的可以了解一下2024-01-01
以實(shí)例講解Objective-C中的KVO與KVC機(jī)制
這篇文章主要介紹了以實(shí)例講解Objective-C中的KVO與KVC機(jī)制,即Key-Value-Observing與Key-Value-Coding,需要的朋友可以參考下2015-09-09
java使用單向鏈表解決數(shù)據(jù)存儲(chǔ)自定義排序問(wèn)題
本文主要介紹了java使用單向鏈表解決數(shù)據(jù)存儲(chǔ)自定義排序問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

