可填充字段有创建时间、更新时间、用户信息、多租户信息等、业务uuid(主键自增);
1、创建类BaseEntityMetaObjectHandler继承MetaObjectHandler
@Component
public class BaseEntityMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Date now = DateUtil.date();
//创建时间createTime
Object createTime = this.getFieldValByName("createTime", metaObject);
if (createTime == null) {
this.setFieldValByName("createTime", now, metaObject);
}
//更新时间updateTime
Object updateTime = this.getFieldValByName("updateTime", metaObject);
if (updateTime == null) {
this.setFieldValByName("updateTime", now, metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
// 判断是否有该字段的getter方法,即判断是否有这个字段
if (metaObject.hasGetter("lastModified")) {
//更新时间
Object updateTime = this.getFieldValByName("updateTime", metaObject);
if (updateTime == null) {
this.setFieldValByName("updateTime", DateUtil.date(), metaObject);
}
}
}
2、注解填充字段 @TableField(.. fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
注意:更新字段值时也可使用官方提供的fillStrategy方法,以及strictUpdateFill方法,但默认的填充策略是“如果属性有值则不覆盖,如果填充值为null则不填充”
遇到这种情况可使用setFieldValByName方法,跳过null判断,强制更新值。