Mybatis-Plus

在使用Mybatis-Plus的updateById接口更新数据时,发现设置的modifiedTime和modifiedUser字段未自动更新。问题在于当原有数据不为null时,Mybatis-Plus不会自动填充。解决方法是在updateFill方法中先将这两个字段设为null,再进行strictUpdateFill,确保每次更新都会覆盖原有值。这种方法虽然简单但有效。
摘要由CSDN通过智能技术生成

关于Mybatis-Plus中的MetaObjectHandler.updateFill不生效问题

描述

今天在调试接口过程中,调用updateById接口后,设置的自动田中修改时间和修改人信息在数据库中未更新。
spring-boot版本:2.5.4
mybatis-plus版本:3.4.3.3

实体代码片段

@TableField(fill = FieldFill.INSERT_UPDATE)
private Date modifiedTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String modifiedUser;

重写代码片段

@Override
public void updateFill(MetaObject metaObject) {
	strictUpdateFill(metaObject, "modifiedTime", Date.class, new Date());
	strictUpdateFill(metaObject, "modifiedUser", String.class, UserUtil.getUser().getUserName());
}

问题原因及解决方案

在更新数据时,如果原有的数据不为null,则使用原数据。如果为null,则自动填充。既然是这样,那么在自动填充前,将两个字段的数据清空是不是就可以了呢?经过实际验证,该方法可行。

@Override
public void updateFill(MetaObject metaObject) {
	metaObject.setValue("modifiedTime", null);
    metaObject.setValue("modifiedUser", null);
	strictUpdateFill(metaObject, "modifiedTime", Date.class, new Date());
	strictUpdateFill(metaObject, "modifiedUser", String.class, UserUtil.getUser().getUserName());
}

总结

相比于手动set值以及网上说的重写对应的方法,此种解决方法虽然有点low,但是简单方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值