Mybatis-plus下的QueryWrapper

1,773 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

一.QueryWrapper是什么?

QueryWrapper就是在使用Mybatis-plus中真实用到的一种技术,也叫作构造器,能简化sql的操作。如果使用它,能节省不少写sql语句的麻烦。继承自AbstractWrapper ,自身的内部属性entity也用于生成where条件 及LambdaQueryWrapper, 可以通过new QueryWrapper().lambda() 方法获取.

二.常用方法

其实实际操作中直接写一些类似以下语句就可以实现querymapper cart.eq("userId", userId);

函数名说明例子
eq等于eq("name","张三") //name='张三'
ne不等于ne("name","张三") //name<>'张三'
gt大于gt("age","18") //age>18
lt小于...
between在值a和值b之间...
like模糊查询...
isNull字段为NULL...

补充:

in:字段 IN (v0, v1, …),notIn:字段 NOT IN (value.get(0), value.get(1), …)

*or:或者 ,and:和 (主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接))

orderByAsc:升序:ORDER BY 字段, … ASC,orderByDesc:降序:ORDER BY 字段, … DESC

三.代码示例

@GetMapping("/list")
public TableDataInfo list(Student student){
    LambdaQueryWrapper<Student> lqw = new LambdaQueryWrapper<Student>();
    lqw.eq(Student::getName, student.getName());
    lqw.like(Student::getClass,student.getClass());
    lqw.between("age",student.getAge1(),student.getAge2());
    lqw.orderByAsc("age");
    List<Student> list = studentService.list(lqw);
}

对应的sql语句为:

select * from student where name = '?' and class like '%?%' and age between '?' and '?' order by '?' asc

如果是多表需要用到这个简化sql操作呢? 以下代码示例或许能让你焕然贯通

//Controller
@GetMapping("/listAndClass")
public TableDataInfo listAndClass(Student student)
{
    QueryWrapper<Student > qw = new QueryWrapper<Student >();
    if(StringUtils.isNotBlank(student.getName())){
        qw.eq("s.name",student.getName());
    }
    if(StringUtils.isNotBlank(student.getClassName())){
        qw.like("c.name",student.getClassName());
    }
    startPage();
    List<Student > list = studentService.listAndClass(qw);
    return getDataTable(list);
}

//Service
 List<Student> listAndClass(QueryWrapper<Student> qw);

//Service impl
@Override
public List<Student> listAndClass(QueryWrapper<Student> qw) {
    return this.getBaseMapper().listAndClass(qw);
}

//Mapper
@Select("select s.*,c.name from student s left join class c on s.id = c.student_id "+
        "${ew.customSqlSegment}")
List<YwSpaqjgDj> listAndClass(@Param(Constants.WRAPPER) QueryWrapper<Student> qw);

学会使用这个操作,可以简化许多代码,但是框架依赖性也挺强的。