В MyBatis вы отмечаете места, где параметры должны быть вставлены в ваш SQL следующим образом:
SELECT * FROM Person WHERE id = # {id}
Этот синтаксис активирует правильное экранирование и т.д., чтобы избежать, среди прочего, атак SQL-инъекций. Если у вас есть доверенный ввод и вы хотите пропустить экранирование, вы можете вставить параметры дословно:
SELECT * FROM {tableName} WHERE id = # {id}
Теперь я хочу сделать LIKE-поиск на небезопасном входе, поэтому я хочу сделать следующее:
SELECT * FROM Person WHERE name LIKE # {beginOfName} || '%'
К сожалению, однако, важные серверы базы данных не поддерживают синтаксис ||
для конкатенации:
MSSQL - Прерывает стандарт, используя оператор "+" вместо "||".
...
MySQL - Плохо нарушает стандарт путем переопределения || означает OR.
Итак, я мог бы сделать
SELECT * FROM Person WHERE name LIKE CONCAT (# {beginOfName}, '%')
и ограничиваться, в данном случае, MySQL, или я мог бы сделать
SELECT * FROM Person WHERE name LIKE '{beginOfName}%'
и придется самостоятельно дезинформировать ввод.
Есть ли более элегантное решение?