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

0 ответов

Другие вопросы по тегам