# 字段填充

# 概念

在实体类中有一些公共字段在所有的insert或update时都要进行赋值,如创建时间、修改时间、逻辑删除等字段, 因此可以通过字段填充功能对公共字段赋值,不再需要在代码中手动对上述字段赋值,具体实现如下:

# HOS实现

在HOS平台中使用Base类中的insert和update方法时,已对createTime、updateTime进行了自动填充,无需开发者二次处理, 只需要在字段上按照下面的使用方式添加注解即可。。

注意:自动填充功能只对BaseMapper中的方法生效,不对开发者在Mapper.xml中编写的代码生效

# 添加注解

在字段上添加注解@TableField(.. fill = FieldFill.INSERT)

示例如下:

@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;

# 自定义实现方案

业务项目中如果存在需要自动填充的字段时,可以自定义MetaObjectHandler实现类。

# 自定义MetaObjectHandler实现类

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    public MyMetaObjectHandler() {
    }

    @Override
    public void insertFill(MetaObject metaObject) {
        if (metaObject.getObjectWrapper().hasSetter("createTime")) {
            this.setFieldValByName("createTime", new Date(), metaObject);
        }
        if (metaObject.getObjectWrapper().hasSetter("updateTime")) {
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
        //示例:在表中存在逻辑删除字段deleted的前提下insert时自动填充值为false
        if (metaObject.getObjectWrapper().hasSetter("deleted")) {
            this.setFieldValByName("deleted", false, metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        if (metaObject.getObjectWrapper().hasSetter("updateTime")) {
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
    }
}

详细介绍请参考官方文档 (opens new window)