(Как) я могу использовать «LIKE» в SQL-запросах с MyBatis безопасно и без учета БД?

ВMyBatisВы отмечаете места, где параметры должны быть вставлены в ваш SQL следующим образом:

ВЫБЕРИТЕ * ОТ ЛИЦА, ГДЕ id =#{Я бы}

Этот синтаксис активирует правильное экранирование и т. Д., Чтобы избежать, среди прочего, атак внедрения SQL. Если вы доверяете вводу и хотите пропустить экранирование, вы можете дословно вставить параметры:

ВЫБРАТЬ ИЗ{} TABLENAME ГДЕ id = # {id}

Теперь я хочу выполнить LIKE-поиск небезопасного ввода, поэтому я хочу сделать следующее:

ВЫБЕРИТЕ * ОТ ЛИЦА, ГДЕ НРАВИТСЯ# {beginOfName} || '%'

к несчастьюОднако важные серверы БДне поддерживает|| синтаксис для объединения:

MSSQL - нарушает стандарт, используя оператор «+» вместо «||».

...

MySQL - сильно нарушает стандарт, переопределяя || означать ИЛИ.

Итак, я мог сделать либо

ВЫБЕРИТЕ * ОТ ЛИЦА, ГДЕ НРАВИТСЯCONCAT (# {beginOfName}, '%')

и быть ограниченным, в этом случае MySQL, или я мог бы сделать

ВЫБЕРИТЕ * ОТ ЛИЦА, ГДЕ НРАВИТСЯ'{BeginningOfName}%'

и должен был бы дезинфицировать вход сам.

Есть ли более элегантное решение?

Ответы на вопрос(6)

Ваш ответ на вопрос