1

我正在使用 SelectProvider 在运行时执行存储过程。

@SelectProvider(type = SqlGenerator.class, method = "getProcedure")
@Options(statementType = StatementType.CALLABLE)
public void executeProc(@Param("object") Object object);

但这给出了以下错误

严重:servlet [web] 在路径 [/web] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 org.mybatis.spring.MyBatisSystemException:嵌套异常是 org.apache.ibatis.binding.BindingException:找不到参数“searchString”。可用参数是 [param1, object]],根本原因是 org.apache.ibatis.binding.BindingException:找不到参数“searchString”。可用参数为 [param1, object]

“搜索字符串”是传递给方法的搜索对象内的变量。当我使用 @Select 直接调用存储过程时,它工作正常。

@Select(value = "{call ALL_SEARCH.SEARCH(
        #{searchString, mode=IN}, 
        #{searchType, mode=IN}, 
        #{personList, mode=OUT, jdbcType=ARRAY, jdbcTypeName=PERSON_TB, typeHandler=com.xyz.PersonArrayHandler}, 
        #{returnCode, mode=OUT, jdbcType=INTEGER}, 
        #{returnMsg, mode=OUT, jdbcType=VARCHAR})}")
@Options(statementType = StatementType.CALLABLE)
public void performSearch(Object search);

任何帮助都是非常可观的。

添加 getProcedure 方法

public static String getProcedure(Map<String, Object> params) throws ConnectorException {
    String sql = "{call ALL_SEARCH.SEARCH(" 
        + "#{searchString, mode=IN}, " 
        + "#{searchType, mode=IN}, " 
        + "#{personList, mode=OUT, jdbcType=ARRAY, jdbcTypeName=PERSON_TB, typeHandler=com.xyz.PersonArrayHandler}, " 
        + "#{returnCode, mode=OUT, jdbcType=INTEGER}, " 
        + "#{returnMsg, mode=OUT, jdbcType=VARCHAR})};"
    return sql;
}
4

0 回答 0