一.使用场景:
比如通常,我们在建表时,会设置几个公共字段:创建人(creator)、更新人(uptater)、创建时间(create_time)、更新时间(update_time)。
二.使用教程:
1:首先需要实现MetaObjectHandler接口 ,MetaObjectHandler是元对象字段填充控制器抽象类,实现公共字段自动写入。
MetaObjectHandler接口有两个接口方法,需要我们自己去实现它:
/**
* 插入元对象字段填充(用于插入时对公共字段的填充)
*
* @param metaObject 元对象
*/
void insertFill(MetaObject metaObject);
/**
* 更新元对象字段填充(用于更新时对公共字段的填充)
*
* @param metaObject 元对象
*/
void updateFill(MetaObject metaObject);
下面是我们自己实现这个接口,实现插入数据和修改数据时的字段填充,代码如下:
它首先检查即将插入的对象(通过MetaObject
表示)是否包含createTime
和updateTime
字段的setter方法(即是否有这两个字段可以被设置值)。如果对象有updateTime
字段的setter方法,则调用strictInsertFill
方法来设置updateTime
字段的值为当前时间(LocalDateTime.now()
)
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override //插入数据时自动填充创建时间与更新时间
public void insertFill(MetaObject metaObject) {
boolean createTime = metaObject.hasSetter("createTime");
boolean updateTime = metaObject.hasSetter("updateTime");
if (updateTime) {
strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
if (createTime) {
strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
}
@Override //修改数据时自动更新此次的修改时间
public void updateFill(MetaObject metaObject) {
boolean updateTime = metaObject.hasSetter("updateTime");
if (updateTime) {
strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
}
2. 在实体类上添加注解
除了上面实现两个接口方法,还需要在对应实体的属性上添加注解,这样Mybatis—Plus才能正常进行赋值处理。
/**
* 创建时间
*/
@TableField(value = "create_time",fill = FieldFill.INSERT)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;