快捷搜索: 王者荣耀 脱发

MyBatis-Plus实现字段的自动填充

前言

在日常开发中,特别是一些业务系统项目,共同发现一个规律,那就是对于诸多业务表中都包含有相同的字段,比如id主键、uuid、create_time、creator_code、update_code、update_time等。而这些字段也是对于有些表而言是必要存在的。 为了避免业务开发时重复编写赋值代码,就可以利用MyBatis-Plus实现字段的自动填充,当然还有一种思路是自己编写AOP,这里就不进行追述,

实现思路

1、利用Mybatis-plus 的@TableField(fill = FieldFill.INSERT) 启到识别作用 2、实现填充器,具体实现insertFill()跟 updateFile() 接口即可

代码实现

pom
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
库表设计
CREATE TABLE `data_fuse` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,
  `creator_code` varchar(50) DEFAULT NULL COMMENT 创建人,
  `create_time` timestamp NULL DEFAULT NULL COMMENT  创建时间,
  `update_code` varchar(50) DEFAULT NULL COMMENT 修改人,
  `update_time` timestamp NULL DEFAULT NULL COMMENT 更新时间,
  PRIMARY KEY (`id`) USING BTREE,
)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
映射成实体类 ,核心技术注解: @TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT_UPDATE)

FieldFill是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值: DEFAULT:默认不处理 INSERT:插入时自动填充字段 UPDATE:更新时自动填充字 INSERT_UPDATE:插入和更新时自动填充字段

@ApiModelProperty(value = "创建人")
    @TableField(value = "creator_code", fill = FieldFill.INSERT)
    private String creatorCode;

    @ApiModelProperty(value = "创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @ApiModelProperty(value = "修改人")
    @TableField(value = "update_code", fill = FieldFill.INSERT_UPDATE)
    private String updateCode;

    @ApiModelProperty(value = "修改时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
MetaObjectHandler 实现
@Slf4j
@Component
@Primary
public class FillMetaObjectHandler implements MetaObjectHandler {
          
   

    @Override
    public void insertFill(MetaObject metaObject) {
          
   
        log.debug("start insert fill ....");
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        User user = UserUtils.getUser();
        if (ObjectUtils.isNotEmpty(user)) {
          
   
            String userCode = user.getUserCode();
            this.setFieldValByName("creatorCode", userCode, metaObject);
            this.setFieldValByName("updateCode", userCode, metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
          
   
        log.debug("start update fill ...." );
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        User user = UserUtils.getUser();
        if (ObjectUtils.isNotEmpty(user)) {
          
   
            String userCode = user.getUserCode();
            this.setFieldValByName("updateCode", userCode, metaObject);
        }
    }
}
经验分享 程序员 微信小程序 职场和发展