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。所以頁面中的屬性值無法清空。

 

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