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方法有了更深入的理解,能够更好地在项目中使用。