在 MyBatis-Plus 中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略。
1、调整全局策略(会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null)
mybatis-plus:global-config:db-config:insert-strategy: ignored # "忽略判断", 所有字段都插入update-strategy: ignored # "忽略判断", 所有字段都更新
insertStrategy、updateStrategy 属性的值有以下5种枚举类型:
- ignored “忽略判断”, 所有字段都更新或插入
- not_null “非 NULL 判断”, 只更新或插入非NULL值
- not_empty “非空判断”, 只更新或插入非NULL值且非空字符串
- default 如果字段的值不为null,则进行插入或者更新操作;如果字段的值为null,不执行操作,执行结果还是数据库原来的值或者默认值
- never 永远不进行插入或更新操作,即使字段的值不为null
2、调整字段验证注解
在属性上注解
根据具体情况,在需要更新或者插入的字段中调整验证注解,如忽略判断,任何情况都进行插入和更新操作:
@TableField(updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)
3、使用 UpdateWrapper
UpdateWrapper<Entity> wrapper = new UpdateWrapper<>();
wrapper.eq("id", id).set("field1", null).set("field2", value2);
myService.update(wrapper);