optimize: 枚举注解EnumValue 用在方法上

This commit is contained in:
huangxy 2024-01-18 11:08:04 +08:00
parent f9502671cf
commit bbd1f8daee
3 changed files with 11 additions and 2 deletions

View File

@ -22,7 +22,7 @@ import java.lang.annotation.*;
*/ */
@Documented @Documented
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD}) @Target({ElementType.FIELD, ElementType.METHOD})
public @interface EnumValue { public @interface EnumValue {
} }

View File

@ -22,6 +22,7 @@ import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler; import org.apache.ibatis.type.TypeHandler;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.CallableStatement; import java.sql.CallableStatement;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
@ -34,7 +35,8 @@ public class CompositeEnumTypeHandler<E extends Enum<E>> implements TypeHandler<
public CompositeEnumTypeHandler(Class<E> enumClass) { public CompositeEnumTypeHandler(Class<E> enumClass) {
List<Field> enumDbValueFields = ClassUtil.getAllFields(enumClass, f -> f.getAnnotation(EnumValue.class) != null); List<Field> enumDbValueFields = ClassUtil.getAllFields(enumClass, f -> f.getAnnotation(EnumValue.class) != null);
if (enumDbValueFields.isEmpty()) { List<Method> enumDbValueMethods = ClassUtil.getAllMethods(enumClass, m -> m.getAnnotation(EnumValue.class) != null);
if (enumDbValueFields.isEmpty() && enumDbValueMethods.isEmpty()) {
delegate = new EnumTypeHandler<>(enumClass); delegate = new EnumTypeHandler<>(enumClass);
} else { } else {
delegate = new FlexEnumTypeHandler<>(enumClass); delegate = new FlexEnumTypeHandler<>(enumClass);

View File

@ -70,6 +70,13 @@ public class EnumWrapper<E extends Enum<E>> {
this.getterMethod = getter; this.getterMethod = getter;
} }
} }
if (!hasEnumValueAnnotation) {
Method enumValueMethod = ClassUtil.getFirstMethod(enumClass, method -> method.getAnnotation(EnumValue.class) != null);
if (enumValueMethod != null) {
this.getterMethod = enumValueMethod;
}
}
} }