开启掘金成长之旅!这是我参与「掘金日新计划 · 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);
学会使用这个操作,可以简化许多代码,但是框架依赖性也挺强的。