mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
fix: issues #302, enum question
This commit is contained in:
parent
8eb8807ac8
commit
8f1d2b214f
@ -17,6 +17,7 @@ package com.mybatisflex.core.mybatis;
|
||||
|
||||
import com.mybatisflex.core.FlexConsts;
|
||||
import com.mybatisflex.core.exception.FlexExceptions;
|
||||
import com.mybatisflex.core.util.EnumWrapper;
|
||||
import org.apache.ibatis.mapping.BoundSql;
|
||||
import org.apache.ibatis.mapping.MappedStatement;
|
||||
import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
|
||||
@ -25,7 +26,6 @@ import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -80,6 +80,12 @@ public class SqlArgsParameterHandler extends DefaultParameterHandler {
|
||||
TypeHandler typeHandler = typeHandlerRegistry.getTypeHandler(value.getClass());
|
||||
if (typeHandler == null) {
|
||||
typeHandler = typeHandlerRegistry.getUnknownTypeHandler();
|
||||
|
||||
// 枚举值特殊处理:若未注册枚举TypeHandler,则判断@EnumValue,若没有@EnumValue注解,则获取枚举的name
|
||||
if(value instanceof Enum){
|
||||
EnumWrapper enumWrapper = EnumWrapper.of(value.getClass());
|
||||
value = enumWrapper.getEnumValue((Enum) value);
|
||||
}
|
||||
}
|
||||
|
||||
// 此处的 jdbcType 可以为 null 的,原因是 value 不为 null,
|
||||
|
||||
@ -106,7 +106,7 @@ class WrapperUtil {
|
||||
addParam(params, value);
|
||||
getValues(condition.next, params);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
private static void addParam(List<Object> paras, Object value) {
|
||||
if (value == null) {
|
||||
paras.add(null);
|
||||
@ -117,13 +117,12 @@ class WrapperUtil {
|
||||
} else if (value instanceof QueryWrapper) {
|
||||
Object[] valueArray = ((QueryWrapper) value).getAllValueArray();
|
||||
paras.addAll(Arrays.asList(valueArray));
|
||||
} else if (value.getClass().isEnum()) {
|
||||
} else if (value instanceof Enum) {
|
||||
// 枚举类型,处理枚举实际值
|
||||
EnumWrapper enumWrapper = EnumWrapper.of(value.getClass());
|
||||
if (enumWrapper.hasEnumValueAnnotation()) {
|
||||
paras.add(enumWrapper.getEnumValue((Enum) value));
|
||||
} else {
|
||||
paras.add(((Enum<?>) value).name());
|
||||
}
|
||||
// 如果是使用注解标识枚举实际值,则直接获取实际值,但如果是依靠全局枚举TypeHandler处理,则此处只能先存入枚举实例,在SQL执行时才能处理实际值
|
||||
value = enumWrapper.hasEnumValueAnnotation() ? enumWrapper.getEnumValue((Enum) value) : value;
|
||||
paras.add(value);
|
||||
} else {
|
||||
paras.add(value);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user