mybatisPlus注解fill = FieldFill.UPDATE和updateStrategy = FieldStrategy.IGNORED的坑

由于当时使用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。所以页面中的属性值无法清空。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章