From bbd1f8daee93a38a1b52cd79990401213a772eff Mon Sep 17 00:00:00 2001 From: huangxy Date: Thu, 18 Jan 2024 11:08:04 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E6=9E=9A=E4=B8=BE=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3EnumValue=20=E7=94=A8=E5=9C=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mybatisflex/annotation/EnumValue.java | 2 +- .../mybatisflex/core/handler/CompositeEnumTypeHandler.java | 4 +++- .../main/java/com/mybatisflex/core/util/EnumWrapper.java | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) 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; + } + } }