В MyBatis вы отмечаете места, где параметры должны быть вставлены в ваш SQL, следующим образом:
SELECT * FROM Person WHERE id = # {id}
Этот синтаксис активирует правильное экранирование и т. Д., Чтобы избежать, среди прочего, атак внедрения SQL-кода.Если вы доверяете вводу и хотите пропустить экранирование, вы можете вставить параметры дословно:
SELECT * FROM {tableName} WHERE id = # {id}
Теперь я хочу выполнить LIKE-поиск по небезопасным данным, поэтому я хочу сделать следующее:
SELECT * FROM Person, ГДЕ имя LIKE # {beginOfName}||'%'
К сожалению, , однако важные серверы БД не поддерживают синтаксис ||
для объединения :
MSSQL - нарушает стандарт, используя оператор «+» вместо «||».
...
MySQL - серьезно нарушает стандарт, переопределяя ||означать ИЛИ.
Итак, я мог бы сделать либо
ВЫБРАТЬ * ОТ ЛИЦА, ГДЕ НРАВИТСЯ имя CONCAT (# {beginOfName}, '%')
и в этом случае ограничиться MySQL, или я мог бы сделать
SELECT * FROM Person, ГДЕ имя LIKE '{beginOfName}%'
и придется самостоятельно очищать ввод.
Есть ли более элегантное решение?