当前使用版本(必填,否则不予处理)

springboot 2.2.1 mybatis-plus 3.4.3

该问题是如何引起的?(确定最新版也有问题再提!!!)

在官方的demo里,指定@TableField(typeHandler = MybatisEnumTypeHandler.class),在updateById也会报错

重现步骤(如果有就写完整)

  1. 定义枚举 MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

2.定义实体类 MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

3.mybatis-plus配置 MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

  1. DAO MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错 MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

  2. service调用DAO MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

报错信息

MyBatis-Plus @TableField(typeHandler = MybatisEnumTypeHandler.class)在update操作时报错

辅助定位问题的信息

  1. 必须得给枚举值指明@TableField(typehandler),直接改springboot配置mybatis-plus.configuration.default-enum-type-handler为MybatisEnumTypeHandler不生效
  2. @TableField(typeHandler = MybatisEnumTypeHandler.class, javaType = true),加上这个javaType=true,MybatisEnumTypeHandler就能正确拿到枚举类型了,否则updateById的时候,拿到的是java.lang.Object类型

Comment From: lj870704

有大哥可以解释下为什么呢?看了下底层,javaType的作用就是和jdbcType配合进行判断使用什么handler,但是赋值一个true是什么意思

Comment From: miemieYaho

看文档,最新版不需要指定枚举包了