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。

推薦閱讀: