mybatis plus对于create_time、update_time这样的数据库字段提供了自动插入功能,不用每次都手动进行更新,功能参见mp官方文档:https://baomidou.com/guide/auto-fill-metainfo.html,使用时仅需实现MetaObjectHandler接口,然后在对应字段上加上@TableField注解及填充策略,使用非常方便。
![](https://img.haomeiwen.com/i14125027/a87e4c6760028a1e.png)
然而,官方提供的fillStrategy方法,以及strictUpdateFill方法,默认的填充策略是
如果属性有值则不覆盖,如果填充值为null则不填充
所以当selectById从数据库取出旧数据,然后修改自己想修改的字段后调用updateById,会发现update_time字段不会更新,这是因为selectById可以取出update_time的旧值,更新时填充策略会判断属性已有值,不进行自动填充,因此update_time不会自动更新。而且官方目前没有直接提供强制更新的方法。
查看fillStrategy方法源码,我们也可以看到只有属性没有被填充值,才会执行set方法。
![](https://img.haomeiwen.com/i14125027/4b1eec5873aee84c.png)
一个简单的解决方案是直接调用setFieldValByName方法,跳过null判断,强制更新updateTime为当前时间。
![](https://img.haomeiwen.com/i14125027/46f218dbf6db5323.png)
网友评论