Mybatis Plus QueryWrapper復合用法詳解
QueryWrapper復合用法
Mybatis Plus作為一個強大的msql插件,簡化瞭DAO許多操作,使得我們的代碼看上去更加優雅一些;
這裡主要記錄一下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小結
mybatisplus自定義分頁查詢
接口:
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //實現類 public PageList pageQuery(PageArgument pageArgument) { //放入查詢參數 QueryWrapper queryWrapper=new QueryWrapper (); //註意放入參數格式,關聯查詢要寫別名 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
對應條件構造器queryWrapper裡的條件,會在sql中自動拼接,不需要在sql中再寫判斷條件userId=#{userId}這樣的。
QueryWrapper 設置參數幾種格式
queryWrapper.eq(“userid”,“aa”); //相當於userid=#{userid} queryWrapper.like(“userid”,“aa”); //相當於模糊查詢 queryWrapper.eq(StringUtils.isNotBlank(user.getId()), “b.id”,user.getId()); //先判斷這個參數是不是空,為空則不放入,不為空則放入參數 queryWrapper.isNull(“userid”) //相當於where userid is null
有關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管理' or module=‘b管理') and name='123'
不用Consumer直接用.or(),就會導致條件變成這樣:
where module=a管理' or module=‘b管理' and name=‘123' or後邊是—> module=‘b管理' and name=‘123'
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatisplus如何在xml的連表查詢中使用queryWrapper
- mybatisplus where QueryWrapper加括號嵌套查詢方式
- springboot整合mybatis-plus實現多表分頁查詢的示例代碼
- mybatis-plus中BaseMapper入門使用
- 淺談mybatisPlus的Ipage分頁和map參數的問題