1. Mybatis Plus 的 FieldStrategy 有三种策略
- IGNORED:忽略。当策略为 IGNORED 时,表示忽略该字段的空值判断,即无论实体对象的值为空还是非空,都会进行新增、更新操作。
- NOT_NULL:非 NULL。当策略为 NOT_NULL 时,表示字段不能为空,如果实体对象的值为空,则不会进行新增、更新操作。
- NOT_EMPTY:非空。当策略为 NOT_EMPTY 时,表示字段不能为空字符串或 null 值,如果实体对象的值为空字符串或 null,则不会进行新增、更新操作。
注意:updateById() 方法的默认策略为 NOT_NULL
2. 配置
-
全局配置 field-strategy
在 application.yml 文件中添加:
mybatis-plus: global-config: #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断" field-strategy: 0
这样做是全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为 null,可能会影响其他业务数据的正确性。
-
对某个字段设置单独的 field-strategy
根据具体情况,在需要更新的字段中调整验证注解,如验证非空:
@TableField(strategy=FieldStrategy.NOT_EMPTY)
我们只需要在需要更新为 null 的字段上设置忽略策略:
@TableField(strategy = FieldStrategy.IGNORED) private LocalDateTime time;
此时,使用 Mybatis Plus 中的 updateById() 方法便可以更新成功,当参数实体类中的 time 字段为 null 时,数据库中的数据也会更新为 null。
3. 使用 update() 方法
在 Mybatis Plus 中,提供了两个更新方法,除了 updateById() 方法,还有 update() 方法,直接使用 update() 方法可以将字段设置为 null,这种方法不需要增加配置,推荐使用!
好事定律:每件事最后都会是好事,如果不是好事,说明还没到最后。