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