Как выполнить sql, получив динамическую таблицу из mybatis без использования ${}?

#mybatis

#мой батис #mybatis

Вопрос:

Я пытаюсь выполнить инструкцию sql, получая динамическую таблицу.

Если используется #{}, sql не работает, потому что он вводится в форме ‘имя_слоя’.

Поэтому я должен использовать $ {}, но есть проблема, которая уязвима для внедрения sql.

 <select id="test" parameterType="map" resultType="map">           
select 
    *
from
    ${table_name}
</select>
  

Я хочу использовать процедуру для решения этой проблемы, но возвращаемый тип неоднозначен, потому что я должен сделать «выбрать все».

Любые идеи будут оценены по достоинству.

Комментарии:

1. ${table_name} нормально, если вы полностью контролируете значение table_name из своего приложения. Если она поступает из внешнего мира или вводится пользователем, то это недопустимо. Каков ваш вариант использования?

2. В моем случае вводится пользовательский ввод, и имя таблицы выводится с использованием этого ввода, а затем выполняется запрос.

3. @Если это предполагается , это может быть безопасно. Например, пользователь вводит 1 или 2 , а затем вы вводите имя таблицы employee или vehicle , это безопасно. Теперь, если пользователь вводит employee или vehicle , а затем вы напрямую используете эту строку в инструкции SQL, которая производит SQL-инъекцию. Ключевым в том, что вы сказали, является слово выведенный .