mybatis-r2dbc icon indicating copy to clipboard operation
mybatis-r2dbc copied to clipboard

bug: return导致后续参数不绑定,实际应该是continue

Open LvliguoGithub opened this issue 4 years ago • 2 comments

https://github.com/linux-china/mybatis-r2dbc/blob/a9773146d3e6eb6243b5ec898bc12bf745bdba7a/src/main/java/org/apache/ibatis/r2dbc/impl/DefaultReactiveSqlSession.java#L193

LvliguoGithub avatar May 14 '21 07:05 LvliguoGithub

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);
                }
            }
        }
    }
}

LvliguoGithub avatar May 17 '21 08:05 LvliguoGithub

@naah69 这个你能查看一下否? 我看起来这段代码的逻辑好像有些问题: 直接return好像有些问题。

linux-china avatar May 18 '21 04:05 linux-china