参考mybatis-plus官网的手册
https://mp.baomidou.com/guide/annotation.html#tablefield
默认值是:FieldFill.DEFAULT
值 | 描述 |
---|---|
DEFAULT | 默认不处理 |
INSERT | 插入时填充字段 |
UPDATE | 更新时填充字段 |
INSERT_UPDATE | 插入和更新时填充字段 |
一般在JAVA 数据库持久化类DTO中定义,为了在数据insert、update时,能够自动填充
@TableField(
value = "create_time",
fill = FieldFill.INSERT
)
private Date createTime;
@TableField(
value = "create_user",
fill = FieldFill.INSERT
)
private Long createUser;
@TableField(
value = "update_time",
fill = FieldFill.UPDATE
)
private Date updateTime;
@TableField(
value = "update_user",
fill = FieldFill.UPDATE
)
private Long updateUser;
配置完成后,就是解决在哪里触发填充的事,它是通过定义拦截器xxx,继承mybatis-plus core中的接口MetaObjectHandler,插入时填充操作卸载insertFill,依次类推。
/**
* 自动补充插入或更新时的值
*
*/
@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
private static final Logger log = LoggerFactory.getLogger(CustomMetaObjectHandler.class);
public CustomMetaObjectHandler() {
}
public void insertFill(MetaObject metaObject) {
try {
this.setFieldValByName("createUser", this.getUserUniqueId(), metaObject);
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("delFlag", YesOrNotEnum.N.getCode(), metaObject);
this.setFieldValByName("statusFlag", StatusEnum.ENABLE.getCode(), metaObject);
} catch (ReflectionException var3) {
log.warn("CustomMetaObjectHandler处理过程中无相关字段,不做处理");
}
}
public void updateFill(MetaObject metaObject) {
try {
this.setFieldValByName("updateUser", this.getUserUniqueId(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
} catch (ReflectionException var3) {
log.warn("CustomMetaObjectHandler处理过程中无相关字段,不做处理");
}
}
}