您的位置:

MybatisPlusUpdate详解

MybatisPlus是Mybatis的增强工具,它在Mybatis的基础上添加了很多有用的功能,包括快速CRUD操作。其中,update操作也是非常常见的一个操作,而MybatisPlus提供的update方法也有很多种用法,本篇文章将从不同角度对其中的update方法进行详解。

一、MybatisPlusUpdateById

updateById是MybatisPlus对单表更新数据的操作,其基本语法如下:


int updateById(T entity);

其中,T代表实体类,entity代表要更新的对象。这个方法会根据对象的id,自动匹配出要更新的行,然后更新对应的数据。下面是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserById(User user) {
    userMapper.updateById(user);
}

上面的代码中,我们通过自动注入的UserMapper,调用updateById方法更新User对象。

二、MybatisPlusUpdate多参无效

当我们要更新多个字段时,可以使用以下两种方法。第一种方法是在实体类中,通过get和set方法来一个一个地设置更新的值,这种方法比较麻烦。第二种方法是使用多参的update方法,但需要注意的是,MybatisPlus的多参update方法只能更新一个字段,不能更新多个字段,否则会抛出异常。以下是一个错误示例:


@Autowired
private UserMapper userMapper;

public void updateUserByIdAndName(String id, String name) {
    userMapper.update(null,
            new UpdateWrapper<User>().eq("id", id).set("name", name));
}

上面的代码中,我们尝试更新用户id和name,但是会抛出异常。如果我们要更新多个字段,可以使用下面即将介绍的update方法。

三、MybatisPlusUpdateWrapper

如果我们要在更新时使用条件,可以使用MybatisPlus提供的UpdateWrapper来进行更新。UpdateWrapper可以实现条件构造,可以使用类似SQL的语法来构造查询和更新条件,以下是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserByNameAndAge(String name, Integer age) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("name", name).set("age", age);
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,然后使用set方法来设置要更新的值,最后通过update方法进行更新。

四、MybatisPlusUpdate为null不set

如果我们在更新时不希望把null值设置到数据库中,可以使用以下代码来设置:


@Autowired
private UserMapper userMapper;

public void updateUser(User user) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("id", user.getId());
    if (user.getName() != null) {
        wrapper.set("name", user.getName());
    }
    if (user.getAge() != null) {
        wrapper.set("age", user.getAge());
    }
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,然后在set方法之前判断字段值是否为null,如果不是null,则调用set方法进行更新。

五、MybatisPlusUpdateWrapper的用法

在使用UpdateWrapper时,我们还可以使用很多其他的方法来构造查询条件,以下是一些常用的方法:

  • eq:等于,相当于SQL中的=
  • ne:不等于,相当于SQL中的!=
  • gt:大于,相当于SQL中的>
  • ge:大于等于,相当于SQL中的>=
  • lt:小于,相当于SQL中的<
  • le:小于等于,相当于SQL中的<=
  • like:模糊查询,相当于SQL中的like
  • in:IN查询,相当于SQL中的in

以下是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserByWrapper(String name, String address) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("name", name).like("address", address);
    wrapper.set("age", 18);
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,包括名字和地址的值,然后使用set方法来更新年龄字段的值为18。

总结

本文针对MybatisPlus的update方法,从updateById、多参无效、UpdateWrapper、为null不set和UpdateWrapper的用法5个方面进行了详细的阐述。通过本文的讲解,相信读者已经对MybatisPlus的update方法有了更深入的理解,能够更好地在项目中使用。