refactor: optimize FlexDefaultResultSetHandler.java

This commit is contained in:
Michael Yang 2024-03-01 10:20:10 +08:00
parent c7bce49062
commit 1d3860d18a
3 changed files with 36 additions and 34 deletions

View File

@ -85,7 +85,7 @@ public class FlexConfiguration extends Configuration {
if (!mappedStatementId.endsWith(SelectKeyGenerator.SELECT_KEY_SUFFIX)
&& parameterObject instanceof Map
&& ((Map<?, ?>) parameterObject).containsKey(FlexConsts.SQL_ARGS)) {
SqlArgsParameterHandler sqlArgsParameterHandler = new SqlArgsParameterHandler(mappedStatement, (Map) parameterObject, boundSql);
SqlArgsParameterHandler sqlArgsParameterHandler = new SqlArgsParameterHandler(mappedStatement, parameterObject, boundSql);
return (ParameterHandler) interceptorChain.pluginAll(sqlArgsParameterHandler);
} else {
return super.newParameterHandler(mappedStatement, parameterObject, boundSql);

View File

@ -15,7 +15,6 @@
*/
package com.mybatisflex.core.mybatis;
import com.mybatisflex.core.util.StringUtil;
import org.apache.ibatis.annotations.AutomapConstructor;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.binding.MapperMethod.ParamMap;
@ -927,10 +926,15 @@ public class FlexDefaultResultSetHandler extends DefaultResultSetHandler {
private Object prepareSimpleKeyParameter(ResultSet rs, ResultMapping resultMapping, Class<?> parameterType,
String columnPrefix) throws SQLException {
final TypeHandler<?> typeHandler;
if (typeHandlerRegistry.hasTypeHandler(parameterType)) {
typeHandler = typeHandlerRegistry.getTypeHandler(parameterType);
} else {
// final TypeHandler<?> typeHandler;
// if (typeHandlerRegistry.hasTypeHandler(parameterType)) {
// typeHandler = typeHandlerRegistry.getTypeHandler(parameterType);
// } else {
// typeHandler = typeHandlerRegistry.getUnknownTypeHandler();
// }
TypeHandler<?> typeHandler = typeHandlerRegistry.getTypeHandler(parameterType);
if (typeHandler == null) {
typeHandler = typeHandlerRegistry.getUnknownTypeHandler();
}
return typeHandler.getResult(rs, prependPrefix(resultMapping.getColumn(), columnPrefix));

View File

@ -55,35 +55,33 @@ public class SqlArgsParameterHandler extends DefaultParameterHandler {
@SuppressWarnings({"rawtypes", "unchecked"})
private void doSetParameters(PreparedStatement ps) throws SQLException {
Object[] sqlArgs = (Object[]) ((Map) getParameterObject()).get(FlexConsts.SQL_ARGS);
if (sqlArgs != null && sqlArgs.length > 0) {
int index = 1;
for (Object value : sqlArgs) {
// 设置 NULL
if (value == null) {
ps.setNull(index++, Types.NULL);
continue;
}
// 通过配置的 TypeHandler 去设置值
if (value instanceof TypeHandlerObject) {
((TypeHandlerObject) value).setParameter(ps, index++);
continue;
}
TypeHandler typeHandler = typeHandlerRegistry.getTypeHandler(value.getClass());
if (typeHandler != null) {
// 通过对应的 TypeHandler 去设置值
typeHandler.setParameter(ps, index++, value, null);
} else {
/*
* MySqlOracle 等驱动中通过 PreparedStatement.setObject 驱动会自动根据 value 内容进行转换
* 源码可参考 {{@link com.mysql.jdbc.PreparedStatement#setObject(int, Object)}
*/
ps.setObject(index++, value);
}
}
} else {
if (sqlArgs == null || sqlArgs.length == 0) {
super.setParameters(ps);
return;
}
int index = 1;
for (Object value : sqlArgs) {
// 设置 NULL
if (value == null) {
ps.setNull(index++, Types.NULL);
continue;
}
// 通过配置的 TypeHandler 去设置值
if (value instanceof TypeHandlerObject) {
((TypeHandlerObject) value).setParameter(ps, index++);
continue;
}
TypeHandler typeHandler = typeHandlerRegistry.getTypeHandler(value.getClass());
if (typeHandler == null) {
typeHandler = typeHandlerRegistry.getUnknownTypeHandler();
}
// 此处的 jdbcType 可以为 null 原因是 value 不为 null
// 只有 value null jdbcType 不允许为 null
typeHandler.setParameter(ps, index++, value, null);
}
}