Я недавно использовал Mybatis. Я использовал ибати раньше. В целом, это похоже, но я все еще столкнулся с многими проблемами. Я запишу его снова.
Например, разница между использованием #{} и $ {} передачи параметров,
Используйте # для передачи параметра, и анализ оператора SQL добавит «» », например, выберите * из таблицы, где name = # {name}, передаваемое имя - Xiao Li, затем последняя распечатка - это
Выберите * Из таблицы, где имя = 'xiao li', он будет анализироваться как строка. Это, очевидно, лучше, чем $. Передача параметров #{} может предотвратить инъекцию SQL. Если параметр, который вы проходите, - это отдельные кавычки », то если вы используете $ {}, этот метод сообщит об ошибке.
Другой сценарий заключается в том, что если вы хотите сделать динамическую сортировку, например, Order By Column, обязательно используйте $ {} в настоящее время, потому что если вы используете #{}, то печатный будет
Выберите * из таблицы порядок по «Имя», это бесполезно,
В настоящее время, если вы можете использовать #, не используйте $.
Разница между # и $ в mybatis
1. # Обратите все входящие данные как строку и добавьте двойные кавычки к автоматически входящим данным. Например: Заказ от #user_id #, если значение, передаваемое, равно 111, то значение при анализе в SQL - это «111». Если проходящее значение IS ID, проанализированный в SQL - это «ID».
2. $ отображает переданные данные напрямую и генерирует их в SQL. Например: Заказ от $ user_id $, если пройденное значение IS 111, то значение при анализе в SQL - Order by user_id. Если проходящее значение IS ID, проанализированное в SQL является заказом по ID.
3. Метод # может значительно предотвратить инъекцию SQL.
4. Метод $ не может предотвратить инъекцию SQL.
5. Метод $ обычно используется для передачи в объектах базы данных, таких как передача имен таблиц.
6. Как правило, если вы можете использовать #, не используйте $.
При использовании порядка по динамическим параметрам при сортировке mybatis вам нужно обратить внимание на использование $ вместо #
Замена строки
По умолчанию, использование синтаксиса формата #{} заставляет Mybatis создать свойство предварительно обработанного оператора и установить безопасное значение с ним в качестве фона (например?). Это безопасно и быстро, и иногда вы просто хотите вставить строку, которая не изменяется непосредственно в оператор SQL. Например, например, заказ, вы можете использовать его так:
Заказ по $ {columnName}
Здесь Mybatis не будет изменять и не избежать строк.
ВАЖНО: Небезопасно принимать вывод контента от пользователя и предоставлять его неизменной строке в операторе. Это может привести к потенциальным атакам инъекций SQL, поэтому вы не должны позволять пользователям вводить эти поля или обычно избегать и проверять их самостоятельно.
Краткое краткое изложение разницы между $ и # в Mybatis
Не так давно кто -то пришел в нашу компанию на собеседование. Наш менеджер задал этот вопрос. У меня было лишь небольшое понимание этого, поэтому я отправился в Байду.
На самом деле, разница очень проста. Вы поймете это с примером. Напишите предложение SQL-FOR Пример: SELECT * FROM USER_ROLE, где user_code = "100";
В этом предложении его необходимо записано как Select * From $ {TableName}, где user_code = #{usercode}
Следовательно, символ $ записан напрямую в SQL, в то время как символ # будет написан SQL в виде строки.