Mybatis-Plus中的条件构造器
条件构造器(Wrapper)的作用:
MP提供的通用Mapper中,删改查(没有insert)的方法通常会需要我们传入一个条件构造器,用来生成最后执行的SQL语句。
比如List selectList( Wrapper wrapper)方法,当我们传入null时,默认生成的语句就是select * from xxx,这条语句没有查询条件,排序,子查询,模糊查询并且固定查询所有的字段,如果我们需要一些复杂的查询条件,就可以使用条件构造器来指定我们的SQL需要拼接那些查询条件。
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper :
Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :
看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper :
Lambda 更新封装Wrapper
实际使用中,
如果要使用MP的查询、删除方法,通常使用QueryWrapper作为条件的封装实现类;因为它的功能比较强大。
如果要使用MP的修改方法,通常使用UpdateWrapper作为条件的封装实现类,因为它提供了一些独有的方法,适用于update操作,比如set和setSql方法;
其实QueryWrapper和UpdateWrapper的大多数方法都是继承自AbstractWrapper,两者在大部分条件下都是可以互相替换的。
使用方式很简单,就是创建一个Wrapper的实现类对象,然后调用其中的方法就可以进行设置了。下面是一些Wrapper中常用的方法
1、ge、gt、le、lt、eq、ne、isNull、isNotNull
@Test
public void testDelete() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.isNull("name")
.ge("age", 12)
.isNotNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("delete return count = " + result);
}
Execute SQL:(已经开启了逻辑删除功能)
UPDATE user SET deleted=1
WHERE deleted=0
AND
name IS NULL
AND
age >= ?
AND
email IS NOT NULL
2、between、notBetween
@Test
public void testSelectCount() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 20, 30);
Integer count = userMapper.selectCount(queryWrapper);
System.out.