mybatis-r2dbc
mybatis-r2dbc copied to clipboard
bug: return导致后续参数不绑定,实际应该是continue
https://github.com/linux-china/mybatis-r2dbc/blob/a9773146d3e6eb6243b5ec898bc12bf745bdba7a/src/main/java/org/apache/ibatis/r2dbc/impl/DefaultReactiveSqlSession.java#L193
continue也会有问题。此处应该先进入到R2dbcTypeHandler的逻辑中,否则会透传一些r2dbc驱动不支持的数据类型。 public void fillParams(Statement statement, BoundSql boundSql, Object parameter) { List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); if (parameterMappings != null) { for (int i = 0; i < parameterMappings.size(); i++) { ParameterMapping parameterMapping = parameterMappings.get(i); if (parameterMapping.getMode() != ParameterMode.OUT) { Object value; String propertyName = parameterMapping.getProperty(); if (boundSql.hasAdditionalParameter(propertyName)) { value = boundSql.getAdditionalParameter(propertyName); } else if (parameter == null) { value = null; } else if (typeHandlerRegistry.hasTypeHandler(parameter.getClass())) { value = parameter; } else { MetaObject metaObject = configuration.newMetaObject(parameter); value = metaObject.getValue(propertyName); }
TypeHandler typeHandler = parameterMapping.getTypeHandler();
try {
if (typeHandler instanceof R2DBCTypeHandler) {
((R2DBCTypeHandler<Object>) typeHandler).setParameter(statement, i, value, parameterMapping.getJdbcType());
} else {
if (value == null) {
statement.bindNull(i, parameterMapping.getJavaType());
} else {
Class<?> parameterClass = value.getClass();
if (typeHandlerRegistry.hasTypeHandler(parameterClass)) {
typeHandlerRegistry.getTypeHandler(parameterClass).setParameter(statement, i, value, parameterMapping.getJdbcType());
} else {
statement.bind(i, value);
}
}
}
} catch (TypeException e) {
throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);
}
}
}
}
}
@naah69 这个你能查看一下否? 我看起来这段代码的逻辑好像有些问题: 直接return好像有些问题。