背景: 数据库中有 creation_date, last_update_date
需求: 该时间字段由MybatisPlus自动插入和更新,业务代码无需处理
方法:
一、创建基础实体【BaseEntity】,定义需要处理的公共字段(创建时间、修改时间、创建人、修改人、备注……),供其他业务实体类继承
@Data
public class BaseEntity implements Serializable {
@TableField(value = "d_create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "d_update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
二、创建元数据处理器【MetaHandler】,继承自MetaObjectHandler
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
**/
@Component
public class MetaHandler extends MetaObjectHandler {
/**
* 新增数据执行
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
/**
* 更新数据执行
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
三、创建配置文件【MybatisPlusConfig】,全局注入元数据处理器
@Configuration
public class MyBatisPlusConfig {
/**
* 自动填充功能
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
四、实体类 继承 公共字段信息 实体类创建或者更新,会默认加载 基础数据填充 无需代码额外处理
@Data
@Accessors(chain = true)
@TableName("t_web_news")
public class News extends BaseEntity {
/**
* 自增ID
*/
@TableId(value = "n_id", type = IdType.AUTO)
private Integer id;
/**
* 内容
*/
@TableField("c_area")
private String area;
/**
* 封面
*/
@TableField("c_cover")
private String cover;
/**
* 上下架默认0:1:下架;2:上架
*/
@TableField("n_stand")
private Integer stand;
/**
* 标题
*/
@TableField("c_title")
private String title;
@TableField("n_type")
private Integer type;
}
重新启动。 完成 基础数据的默认加载操作。完成 last_update_date 时间填充。