QueryWrapper复合用法
LGVT 人气:30QueryWrapper复合用法
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'
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容