MyBatis SelectProvide передать объект в качестве параметра
Я использую SelectProvider для выполнения хранимой процедуры во время выполнения.
@SelectProvider(type = SqlGenerator.class, method = "getProcedure")
@Options(statementType = StatementType.CALLABLE)
public void executeProc(@Param("object") Object object);
Но это дает следующую ошибку
SEVERE: Servlet.service() для сервлета [web] в контексте с путем [/web] вызвала исключение [Ошибка обработки запроса; вложенным исключением является org.mybatis.spring.MyBatisSystemException: вложенным исключением является org.apache.ibatis.binding.BindingException: параметр searchString не найден. Доступны следующие параметры: [param1, object]] с первопричиной org.apache.ibatis.binding.BindingException: параметр searchString не найден. Доступные параметры: [param1, object]
'search String' - это переменная внутри объекта Search, которая передается методу. Когда я напрямую вызываю хранимую процедуру с помощью @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;
}