写在前面
在实际工作中,当我们执行插入或者更新操作时,如果没有设置某个成员属性的属性,并且数据库中也没有设置默认值时,那么在数据表中该字段要么是NULL,要么就会保留原来的值,而使用公共字段自动填充功能,可以让我们在没有赋值时也能自动设置指定的值。
操作步骤
假设表中三个字段:spu_status、create_time、 update_time
①. 实体对象,注意这三个成员属性的注解
@Data
@TableName("mallx_spu")
public class SpuDO extends BaseDO {
private String title;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String spuStatus;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
...
}
②. 填充策略说明
public enum FieldFill {
// 默认不处理
DEFAULT,
// 仅插入时填充字段
INSERT,
// 仅更新时填充字段
UPDATE,
// 插入和更新时都填充字段
INSERT_UPDATE;
private FieldFill() {
}
}
③. 需要自定义一个字段填充处理器,它需要继承MetaObjectHandler 类,并且重写 insertFill 和 updateFill 方法,在这两个方法中将需要填充的字段进行填充。
A. 自定义的字段填充处理器需要添加 @Component 或 @Bean 注解,注入到Spring容器上下文中;
B. strictInsertFill 和 strictUpdateFill 方法第二个参数写的是实体类里的属性名,不是对应数据库字段名。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
(metaObject, "spuStatus", , "下架");
(metaObject, "createTime", , new Date());
(metaObject, "updateTime", , new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
(metaObject, "spuStatus", , "上架");
(metaObject, "updateTime", , new Date());
}
}
④. 使用说明
创建和更新时,能够自动填充的字段属性,实体的这些成员属性就可以不用进行设置。