Mybatis-Plus自动填充功能@TableField(FieldFill)


Mybatis-Plus


原理


1.实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

2.注解填充字段 @TableField(.. fill = FieldFill.INSERT) 生成器策略部分也可以配置!

@Data
public class BaseDO implements Serializable {
    @TableId
    private Long id;

    @TableField(value = "gmt_created", fill = FieldFill.INSERT)
    private LocalDateTime gmtCreated;

    @TableField(value = "gmt_modified", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime gmtModified;

    /**
     * 添加版本号,实现乐观锁
     */
    @Version
    @TableField(value = "version", fill = FieldFill.INSERT)
    private Integer version;
}


3.自定义实现类 MyMetaObjectHandler

/**
 * @author WongJie
 * @Description: mybatis-Plus自动填充功能
 * @date 2022/9/9 11:40
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "gmtCreated", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        this.strictInsertFill(metaObject, "gmtModified", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        this.strictInsertFill(metaObject, "version", () -> Integer.valueOf(1), Integer.class); // 起始版本 3.3.3(推荐)
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "gmtModified", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
    }
}

4.注意事项