Mybatis?Plus?QueryWrapper復合用法詳解
更新時間:2022年01月11日 10:57:06 作者:LGVT
這篇文章主要介紹了Mybatis?Plus?QueryWrapper復合用法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
QueryWrapper復合用法
Mybatis Plus作為一個強大的msql插件,簡化了DAO許多操作,使得我們的代碼看上去更加優(yōu)雅一些;
這里主要記錄一下QueryWrapper的復雜查詢用法
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自定義分頁查詢
接口:
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//實現(xiàn)類
?public PageList pageQuery(PageArgument pageArgument) ?{
? ? ? ? //放入查詢參數(shù)
? ? ? ? QueryWrapper queryWrapper=new ?QueryWrapper ();
? ? ? ? //注意放入?yún)?shù)格式,關(guān)聯(lián)查詢要寫別名
? ? ? ? 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自定義:
?<!-- 分頁查詢-->
? ? <select id="pageQueryTestUser" resultType="TestUser">
? ? ? ? ? ? select b.* from TestUser b
? ? ? ? ? ? inner join TestStudent ?i on i.id=b.id ?${ew.customSqlSegment}
? ? </select>其中ew.customSqlSegment
對應(yīng)條件構(gòu)造器queryWrapper里的條件,會在sql中自動拼接,不需要在sql中再寫判斷條件userId=#{userId}這樣的。
QueryWrapper 設(shè)置參數(shù)幾種格式
queryWrapper.eq(“userid”,“aa”); //相當于userid=#{userid}
queryWrapper.like(“userid”,“aa”); //相當于模糊查詢
queryWrapper.eq(StringUtils.isNotBlank(user.getId()), “b.id”,user.getId()); //先判斷這個參數(shù)是不是空,為空則不放入,不為空則放入?yún)?shù)
queryWrapper.isNull(“userid”) //相當于where userid is null有關(guān)queryWrapper使用or條件時
把or條件單獨隔離,不影響后邊的條件
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");這樣拼接出來的條件就是,Consumer就相當于一個括號把or條件獨立了
where (module=‘a(chǎn)管理' or module=‘b管理') and name='123'
不用Consumer直接用.or(),就會導致條件變成這樣:
where module=a管理' or module=‘b管理' and name=‘123' or后邊是—> module=‘b管理' and name=‘123'
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java使用單向鏈表解決數(shù)據(jù)存儲自定義排序問題
本文主要介紹了java使用單向鏈表解決數(shù)據(jù)存儲自定義排序問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

