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