问题:基于mybatis-plus下更新指定字段为null
一、mybatis-plus是什么?
mybatis-plus简称:MP,是基于mybatis实现的增强插件。快速实现单表操作
特点:
- 免xml,全程不用xml文件,基于java代码实现
- 简单配置
- 集成代码生成,自动分页,逻辑删除等快捷开发方式
二、mybatis-plus下更新字段值为null
在使用Mybatis-plus的更新方法的时候,如果传递的参数中某个字段为null,会忽略当前字段值的更新,默认不会对为null的字段更新成null。但是我们有写场景下必须对单独的几个字段赋值为null,那么这种情况下怎么去实现呢?
1. @TableField 注解实现:
@TableField(updateStrategy= FieldStrategy.IGNORED)
private String name;
值 | 描述 |
---|---|
IGNORED | 忽略判断 |
NOT_NULL | 非 NULL 判断 |
NOT_EMPTY | 非空判断(只对字符串类型字段,其他类型字段依然为非 NULL 判断) |
DEFAULT | 追随全局配置 |
NEVER | 不加入SQL |
-- FieldStrategy.IGNORED 忽略判断,相当于跳过对null值得判断,该更新什么就更新什么:
update student set name = null
调用Mapper.updateById(T entity)时,就可以插入null值了。
这中方式有个弊端,修改方式是全局的,影响updateById()方法的调用效果。
2. Mapper.update()方法实现:
与select方式一样,mybatis-plus也提供了update的UpdateWrapper方式:
LambdaUpdateWrapper<StudentEntity> auw = new LambdaUpdateWrapper<>();
auw.set(StudentEntity :: getName, null);
auw.eq(StudentEntity :: getId, 1);
this.mapper.update(null, auw);
-- 这种方式指定更新字段和更新的值,相当于:
update student set name = null where id = 1