由于当时使用mybatisPlus的updateById更新数据,习惯性的认为字段为null的不更新。但是上线后,出问题了。只更新状态字段,其他的一些属性竟然被置空了。
赶紧排查,发现实体类中这些字段有fill = FieldFill.UPDATE,导致更新的时候如果这个字段为null也会更新为null。
同样作用的还有@TableField(updateStrategy = FieldStrategy.IGNORED)。
解决方法:
1.只更新状态字段改为用sql编写,不使用mybatisplus的updateById。
2.另外定义实体,去掉这些注解。
引申:
突然想起来,mybatis自动生成代码工具中,为什么mapper中会有updateByPrimaryKeySelective和updateByPrimaryKey这两种方法了,一个是全量更新,一个是选择性更新。
在使用mybatisPlus时候,会涉及到全量更新和选择性更新。平常使用实体中没有使用特定注解(FieldFill.UPDATE和FieldStrategy.IGNORED),会导致页面的属性值无法清空,比如Date和BigDecimal这些类型,空的时候是为null。
如果为null那么mybatisPlus默认是不会更新为null。所以页面中的属性值无法清空。
标签:IGNORED,mybatisPlus,UPDATE,FieldFill,更新,null From: https://www.cnblogs.com/super-chao/p/17918374.html