MyBatis の #{ } と ${ }

【違い】
  1. #{ } はプリコンパイル処理、${ } は文字列置換

  2. Mybatis が #{ } を処理するとき、SQL の #{ } のプレースホルダーを使用してパラメーターを置き換え、PreparedStatement の set メソッドを呼び出して値を割り当てます。

  3. Mybatis が処理中の場合は{ } を入れることです。 {}を変数の値に置き換えることです。

  4. #{ } を使用すると、SQL インジェクションを効果的に防止し、システム セキュリティを向上させることができます。

【使用シーン】
  1. 一般に、SQL インジェクションを回避できるため、#{} が推奨されます。動的テーブル名と動的フィールド名にパラメーターを渡す必要がある場合は、${} を使用する必要があります。
  2. 比如:select * from ${tableName} where id > #{id};
【SQLインジェクション問題】

たとえば、 ${} を使用して問題を挿入する場合:

select * from ${tableName};

パラメータ t_user;delete from t_user が渡された場合、プリコンパイル済み SQL は次のようになり、システムが使用できなくなります。

select * from t_user;delete from t_user

【インジェクション反対声明】

concat 関数を使用します。

select * from t_user where name like concat('%', #{name}, '%')

Supongo que te gusta

Origin blog.csdn.net/Ivy_Xinxxx/article/details/108146543
Recomendado
Clasificación