实现思路
- 利用Mybaits Plus中的@TableField的fill属性进行识别
- 自定义类实现MetaObjectHandler接口重写insertFill()和updateFill()
代码实现
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
- 实体类中需要自动填充的属性通过@TableField的fill属性进行标注
- FieldFill为字段填充策略枚举类,定义了DEFAULT(默认不处理)、INSERT(插入时填充字段)、UPDATE(更新时填充字段)、INSERT_UPDATE(插入和更新时填充字段)等4种填充策略
@Data
@TableName(value = "scheme_config")
public class SchemeConfig {
@TableId
private Long phid;
private Long schemeId;
private Long subId;
private String subType;
private String businessNature;
@TableField(fill = FieldFill.INSERT)
private Date insertTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.UPDATE)
private Long updateUser;
}
public class CustomMetaObjectHandler implements MetaObjectHandler {
private static final String CREATE_USER = "createUser";
private static final String INSERT_TIME = "insertTime";
private static final String UPDATE_USER = "updateUser";
private static final String UPDATE_TIME = "updateTime";
@Override
public void insertFill(MetaObject metaObject) {
Object createUser = metaObject.getValue(CREATE_USER);
if(ObjectUtil.isNull(createUser)) {
setFieldValByName(CREATE_USER, this.getUserUniqueId(), metaObject);
}
Object insertTime = metaObject.getValue(INSERT_TIME);
if(ObjectUtil.isNull(insertTime)) {
setFieldValByName(INSERT_TIME, new Date(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName(UPDATE_TIME, new Date(), metaObject);
setFieldValByName(UPDATE_USER, this.getUserUniqueId(), metaObject);
}
private Long getUserUniqueId() {
return -1L;
}
}
@Configuration
public class MybatisPlusConfig {
@Bean
public CustomMetaObjectHandler metaObjectHandler(){
return new CustomMetaObjectHandler();
}
}
- 实现效果
