05.自动填充处理
在此我们完成了通过数据库以及通过代码实现自动填充,并且解决了mybatisplus自动填充无效,输出为null的错误。
方式一:通过数据库
进行对表的更新,创建create_time,update_time字段,并且为update_time字段增加根据时间戳更新。
在我们进行更新创建后,数据库就会自动填充当前的create_time,update_time字段。但是并不推荐通过修改数据库来进行对自动填充的完成。
方式二:通过代码
对pojo类添加注解
我们需要对自动填充的字段进行添加@TableField注解,并且声明其自动填充的类型。
private String name;
private int age;
@TableId(type = IdType.AUTO)
private int bid;
private String datasource;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
FieldFill类型
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
}
编写MetaHandler类
注意,如果你的pojo类中的字段为java.util.Date类型那么在修改时就会出现update_time为null的情况,如果你使用的Date类型为上,那么就需要使用Date类型,在官网的代码下,我们也列出了修改的代码
官网的代码
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
System.out.println("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
// 或者
// this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
// this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
// 或者
// this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
// this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
}
}
我们在使用java.util.Date所使用的代码。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
ct) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}