一.需求场景
在插入数据的时候自动填充createTime和updateTime为当前插入数据的时间,
在数据更新的时候修改updateTime为修改数据的时间。不需要人为的手动赋值。
二.实现步骤
1.Table表需先添加2个日期类型的字段create_tme和update_time
2.使用@TableField注解标记实体类中的哪些字段需要填充
@Data
public class User {
........
@Schema(description ="创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@Schema(description ="更新时间")
@TableField(fill = FieldFill.UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
FieldFill是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值:
- DEFAULT:默认不处理
- INSERT:插入时自动填充字段
- UPDATE:更新时自动填充字段
- INSERT_UPDATE:插入和更新时自动填充字段
3.实现公共字段填充处理器类
/**
* 自定义公共字段填充处理器,实现公共字段自动填充
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入时自动填充创建时间和更新时间
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", DateTimeUtils.getCurrentDateTime(), metaObject);
this.setFieldValByName("updateTime", DateTimeUtils.getCurrentDateTime(), metaObject);
}
/**
* 更新时自动填充更新时间
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", DateTimeUtils.getCurrentDateTime(), metaObject);
}
}
注意事项
- 1.填充处理器MyMetaObjectHandler在Spring Boot中需要声明@Component或@Bean注入
- 2.setFieldValByName的第一个参数是实体中的属性名称,不是数据库字段名
- 3.update(T entity, Wrapper updateWrapper)时T不能为空,否则自动填充失效