diff --git a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/EnumValue.java b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/EnumValue.java index 50ef61cd..fdae80f0 100644 --- a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/EnumValue.java +++ b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/EnumValue.java @@ -22,7 +22,7 @@ import java.lang.annotation.*; */ @Documented @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD}) +@Target({ElementType.FIELD, ElementType.METHOD}) public @interface EnumValue { } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/handler/CompositeEnumTypeHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/handler/CompositeEnumTypeHandler.java index 7a4276c6..5746c27d 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/handler/CompositeEnumTypeHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/handler/CompositeEnumTypeHandler.java @@ -22,6 +22,7 @@ import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -34,7 +35,8 @@ public class CompositeEnumTypeHandler> implements TypeHandler< public CompositeEnumTypeHandler(Class enumClass) { List enumDbValueFields = ClassUtil.getAllFields(enumClass, f -> f.getAnnotation(EnumValue.class) != null); - if (enumDbValueFields.isEmpty()) { + List enumDbValueMethods = ClassUtil.getAllMethods(enumClass, m -> m.getAnnotation(EnumValue.class) != null); + if (enumDbValueFields.isEmpty() && enumDbValueMethods.isEmpty()) { delegate = new EnumTypeHandler<>(enumClass); } else { delegate = new FlexEnumTypeHandler<>(enumClass); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/EnumWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/EnumWrapper.java index d185950c..e2973761 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/EnumWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/EnumWrapper.java @@ -70,6 +70,13 @@ public class EnumWrapper> { this.getterMethod = getter; } } + + if (!hasEnumValueAnnotation) { + Method enumValueMethod = ClassUtil.getFirstMethod(enumClass, method -> method.getAnnotation(EnumValue.class) != null); + if (enumValueMethod != null) { + this.getterMethod = enumValueMethod; + } + } }