当前使用版本(必填,否则不予处理)
3.5.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
CompositeEnumTypeHandler类当注解匹配时使用MyBatisEnumTypeHandler处理,这与文档中可通过配置文件修改枚举全局处理不相一致,导致用户自定义实现无法覆盖@EnumValue注解的默认实现(从老版本升级到新版本会存在该问题)。 建议:当用户配置了全局的枚举处理,优先使用用户提供的。
`public class CompositeEnumTypeHandler
private static final Map<Class<?>, Boolean> MP_ENUM_CACHE = new ConcurrentHashMap<>();
@Setter
private static Class<? extends TypeHandler> defaultEnumTypeHandler = EnumTypeHandler.class;
private final TypeHandler<E> delegate;
public CompositeEnumTypeHandler(Class<E> enumClassType) {
if (enumClassType == null) {
throw new IllegalArgumentException("Type argument cannot be null");
}
if (CollectionUtils.computeIfAbsent(MP_ENUM_CACHE, enumClassType, MybatisEnumTypeHandler::isMpEnums)) {
delegate = new MybatisEnumTypeHandler<>(enumClassType);
} else {
delegate = getInstance(enumClassType, defaultEnumTypeHandler);
}
}
}`
方式二:直接指定 DefaultEnumTypeHandler 此方式用来 全局 修改 mybatis 使用的 EnumTypeHandler。
配置文件 resources/application.yml
mybatis-plus:
# 修改 mybatis 的 DefaultEnumTypeHandler
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
重现步骤(如果有就写完整)
报错信息
Comment From: miemieYaho
那你就自己写个注解在枚举上,自己实现一个TypeHandler来用
Comment From: huan-ling
建议将更多的扩展性交给用户。
Comment From: miemieYaho
不支持