mybatis plus對于create_time、update_time這樣的數據庫字段提供了自動插入功能,不用每次都手動進行更新,功能參見mp官方文檔:https://baomidou.com/guide/auto-fill-metainfo.html,使用時僅需實現MetaObjectHandler接口,然后在對應字段上加上@TableField注解及填充策略,使用非常方便。
官方文檔使用示例
? ? 然而,官方提供的fillStrategy方法,以及strictUpdateFill方法,默認的填充策略是
? ?????????如果屬性有值則不覆蓋,如果填充值為null則不填充
所以當selectById從數據庫取出舊數據,然后修改自己想修改的字段后調用updateById,會發現update_time字段不會更新,這是因為selectById可以取出update_time的舊值,更新時填充策略會判斷屬性已有值,不進行自動填充,因此update_time不會自動更新。而且官方目前沒有直接提供強制更新的方法。
? ? 查看fillStrategy方法源碼,我們也可以看到只有屬性沒有被填充值,才會執行set方法。
fillStrategy方法
? ? 一個簡單的解決方案是直接調用setFieldValByName方法,跳過null判斷,強制更新updateTime為當前時間。
修改后的updateFill