MyBatis-Plus 字段填充失效

问题现象

已配置 MyBatis-Plus 字段自动填充:

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }

}

PO 类字段也制定了自动填充策略:

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime createTime;

但是往表里插入数据时,createTime 字段就是为 null,自动填充并未生效。

问题分析

当天 Bing 上搜索 FieldFill,对着查看了自己的配置,确定没有问题。

第二天又用 Baidu 搜索了一下,果然让我找到一篇文章:https://www.freesion.com/article/60151065789/

问题原因

多数据源设置 sqlSessionFactory 时没有将自定义的 MetaObjectHandler 配置进来导致自动填充字段失效。

经验教训

  1. 手动实现多数据源的话,MyBatis-Plus 一套相关的东西都需要配置进去,如字段自动填充,分页拦截器等。
  2. 此前也碰到过 Bing 没找到有用信息,在 Baidu 找到的情况,中文搜索看来还是 Baidu 更强一点。
  3. 多数据源更推荐使用 dynamic-datasource-spring-boot-starter
posted @ 2022-04-28 22:18  ageovb  阅读(627)  评论(0编辑  收藏  举报