我正在使用 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;
}