1.继承MetaObjectHandler
@Component
@Slf4j
public class CustomMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", DateUtils::getTime, String.class);
this.strictInsertFill(metaObject, "updateTime", DateUtils::getTime, String.class);
this.strictInsertFill(metaObject, "createUser",
() -> LoginHelper.getUserId()), String.class);
this.strictInsertFill(metaObject, "updateUser",
() -> Optional.ofNullable(LoginHelper.getUserId(), String.class);
}
@Override
public void updateFill(MetaObject metaObject) {
// mp 默认有值不覆盖
metaObject.setValue("updateTime", null);
metaObject.setValue("updateUser", null);
this.strictUpdateFill(metaObject, "updateTime", DateUtils::getTime, String.class);
this.strictUpdateFill(metaObject, "updateUser",
() ->LoginHelper.getUserId(), String.class);
}
}
2.字段上需要设置
@Data
@Accessors(chain = true)
public class BaseEntity implements Serializable {
private static final long serialVersionUID = -206906616465913477L;
@TableField(value = CREATE_USER, fill = FieldFill.INSERT)
private String createUser;
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private String createTime;
@TableField(value = UPDATE_USER, fill = FieldFill.INSERT_UPDATE)
private String updateUser;
@TableField(value = UPDATE_TIME, fill = FieldFill.INSERT_UPDATE)
private String updateTime;
}
实体表字段需要设置fill填充方式,这里updateTime和updateUser都会根据操作人新增或修改都会更新,注意Mybatis-Plus字段填充是针对空字段填充,更新时需要覆盖updateTime和updateUser需要先置空,再填充。