# 字段填充

# 概念

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

# HOS默认实现

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

# 添加注解

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

示例如下:

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

# 默认填充字段

  • insert填充的字段包含:createTimeupdateTimecreateByisDeletedcreateDatelastUpdateDatelastUpdateTimelastUpdateUsercreateUser

  • update填充的字段包含:updateTimeupdateBylastUpdateDatelastUpdateTimelastUpdateUser

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

# 自定义实现方案

业务项目中如果存在需要自动填充的字段时,可以根据下面步骤自定义字段填充。

# 1. 添加maven依赖

<dependency>
    <groupId>com.mediway.hos</groupId>
    <artifactId>hos-app-common</artifactId>
</dependency>

备注:2.4.0到2.5.1,是在hos-app-core,2.5.2移动到hos-app-common

# 2. 继承AbstractMetaObjectHandler类

重写customizeInsertFill和customizeUpdateFill方法来定义新增和更新时的填充字段。

public class HosOpenMetaObjectHandler extends AbstractMetaObjectHandler {
    @Override
    protected void customizeInsertFill(MetaObject metaObject) {
        System.out.println("在此编写新增操作自动填充字段处理");
    }

    @Override
    protected void customizeUpdateFill(MetaObject metaObject) {
        System.out.println("在此编写更新操作自动填充字段处理");
    }
}

# 3. 编写配置类

注意一定要加@AutoConfigureBefore(HosMetaObjectConfiguration.class),保证自定义的配置类比默认配置类提前加载生效。

@Configuration
@AutoConfigureBefore(HosMetaObjectConfiguration.class)
public class HosOpenMetaObjectConfiguration {
    @Bean
    public MetaObjectHandler myMetaObjectHandler(){
        return new HosOpenMetaObjectHandler();
    }
}

# 4. spring.factories文件添加自动装配配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mediway.hos.open.common.config.HosOpenMetaObjectConfiguration

其中spring.factories文件的位置位于resources/META-INF/路径下。

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