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
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface EnumValue {
}

View File

@ -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<E extends Enum<E>> implements TypeHandler<
public CompositeEnumTypeHandler(Class<E> enumClass) {
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);
} else {
delegate = new FlexEnumTypeHandler<>(enumClass);

View File

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