Установка предложения FROM через параметр в MyBatis - PullRequest
2 голосов
/ 15 июня 2011

Мне не удалось увидеть в документации ничего, что говорит о моем вопросе, и после его развертывания мое приложение работает не совсем правильно (подробнее об этом через секунду). Я пытаюсь сделать что-то вроде

<select id="getLookupRows" parameterType="map" resultMap="lookupMap">
   select id, name, active, valid
   from #{table}
</select>

в MyBatis. У меня есть несколько таблиц поиска, которые имеют общие столбцы, и поэтому пользователь на уровне представления определяет, какая таблица поиска в конечном итоге используется. Ошибка, которую я получаю при попытке выполнить getLookupRows, составляет

Cause: org.apache.ibatis.executor.ExecutorException: There was no TypeHandler found for parameter table of statement info.pureshasta.mapper.LookupMapper.getLookupRows
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:77)
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:69)
org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:85)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:65)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
$Proxy15.getLookupRows(Unknown Source)
info.pureshasta.service.FieldTitleService.getLookupRows(FieldTitleService.java:33)

Мой интерфейс картографа выглядит следующим образом:

List<Lookup> getLookupRows(@Param("specificColumn") String specificColumn, 
                           @Param("table") String table);

поэтому мы знаем, что я пытаюсь передать строку в этот запрос, ничего особенного. У меня есть конкретный столбец, потому что это будет моей следующей задачей. Действительно, один из столбцов каждой из таблиц поиска уникален, и поэтому мне нужно вызвать соответствующий конкретный столбец specificColumn, но я был бы очень рад, если бы мог работать параметр таблицы и предложение FROM.

1 Ответ

8 голосов
/ 15 июня 2011
<select id="getLookupRows" parameterType="map" resultMap="lookupMap">
   select id, name, active, valid
   from ${table}
</select>

делает свое дело. Существует другое обозначение, отличное от фактического введения значения для имени столбца и таблицы, а затем произнесения значения столбца. Если вы вводите значение в предложении where, то правильное использование - нотация #.

Если значение, используемое для таблицы в этом запросе, не экранировано, могут возникнуть проблемы с внедрением SQL. В моем случае использования БД предшествовала мне, и, хотя я могу делать все, что захочу с частями Java и View, мне не разрешено изменять фундаментальные структуры таблиц.

Если кто-то захочет дополнительно объяснить трассировку стека, которую я получил (т. Е. Тип таблицы мысли myBatis), я бы с удовольствием прочитал и получил дополнительное образование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...