【开发问题】MybatisPlus 的类型处理器注解没生效

本文发布于 2025年07月24日,阅读 4 次,点赞 0 次,归类于 开发问题记录
【开发问题】MybatisPlus 的类型处理器注解没生效

在数据库的实体类字段上配置了@TableField(typeHandler = JacksonTypeHandler.class)注解,但是并没有生效,查询出来的字段值为 null。


by emanjusaka from https://www.emanjusaka.com/archives/mybatis-plus-typeHandler-invalid 彼岸花开可奈何
本文为原创文章,可能会更新知识点以及修正文中的一些错误,全文转载请保留原文地址,避免产生因未即时修正导致的误导。

博客:https://www.emanjusaka.com
博客园:https://www.cnblogs.com/emanjusaka
公众号:emanjusaka的编程栈

    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<DailyRewardConfig> dailyRewardConfig;

查看注解源码,发现下面的注意事项。

    /**
     * 类型处理器 (该默认值不代表会按照该值生效),
     * 只生效于 mp 自动注入的 method,
     * 建议配合 {@link TableName#autoResultMap()} 一起使用
     * <p>
     * {@link ResultMapping#typeHandler} and {@link ParameterMapping#typeHandler}
     *
     * @since 3.1.2
     */
    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

我发现注解 TableField#typeHandler() 需要配合 TableName#autoResultMap() 一起使用。

修改代码,加上 TableName#autoResultMap()

@TableName(value = "member_cash_config", autoResultMap = true)
@Data
public class MemberCashConfigDO extends BaseDO {

    @TableId
    private Long id;

    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<DailyRewardConfig> dailyRewardConfig;
}

结果类型处理器正常工作,该字段也不再为null。

本篇完
下一篇: 【微知识】Integer 类型比较大小的坑