Я недавно использовал Mybatis. Я использовал ибати раньше. В целом, это похоже, но я все еще столкнулся с многими проблемами. Я запишу его снова.
Позвольте мне сначала представить разницу между #{} и $ {} в 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:
STRING SPEETITIUTYBOR DEFAULT, используя синтаксис #{}, приведет к тому, что MyBatis генерирует свойства подготовленного предприятия и безопасно устанавливать значения на параметры подготовленного стата (например,?). Хотя это безопаснее, быстрее и почти всегда предпочтительнее, иногда вы просто хотите напрямую вводить строку, неизменную в оператор SQL. Например, для заказа, вы можете использовать что -то подобное: Заказ по $ {columnname} Здесь Mybatis не будет изменять или не избежать строки. Примечание не безопасно принимать ввод от пользователя и предоставить его в оператор, неизмененный таким образом. Это приводит к потенциальным атакам инъекций SQL, и поэтому вы должны либо запретить пользовательский ввод в эти поля, либо всегда выполнять свои собственные побеги и проверки. Из вышесказанного мы можем увидеть:
1. Используйте синтаксис формата #{} для использования оператора Preparement в Mybatis, чтобы безопасно установить значения и выполнить SQL, аналогичный следующему:
Подготовлено PS = CONN.PREARESTATEMENT (SQL); Ps.SetInt (1, ID);
Преимущество этого: безопаснее, быстрее и обычно является предпочтительной практикой.
2. Но иногда вы просто хотите вставить неизменную строку непосредственно в оператор SQL. Например, например, заказ, вы можете использовать его так:
Заказ по $ {columnName} В настоящее время Mybatis не будет изменять и не избежать строки.
Этот метод похож на:
Оператор ST = CONN.CreateStatement (); ResultSet RS = St.exeCuteQuery (SQL);
Недостатки этого метода:
Небезопасно принимать вывод контента от пользователя и предоставлять неизменные строки в операторе таким образом, что приводит к потенциальным атакам инъекций SQL, поэтому либо пользователю не разрешается входить в эти поля, либо убежать и проверять сами.