そして、SQL#$ {} {}

事前コンパイルの過程では、それは同じではありません。#{}の前処理パラメータは、部分的に以下のSQLステートメントに、プレースホルダーによって置き換えられますが:=ユーザー名SELECT * FROM;?

そして、$ {}の文字列を単純に交換され、ダイナミックな解決フェーズは、SQL文がに解析されます。ユーザーからの選択*どこ名=「zhangsan」;

したがって、好ましくは#{}を使用します。$ {}の問題SQLインジェクションの原因から!

$ {}を使用して変数としてソートフィールドによってテーブル、オーダー。

1、#{}
JDBCに解決は、プレースホルダでパラメータセクションを書(準備された文)パラメーター・マーカーを準備しましたか?代わりに。動的に解決します。
t_userから*を選択する場所名=?;
正当な文字列が渡されたとして渡された引数は、最終的には必須検査と保安検査のPreparedStatementメソッドを渡し、およびます。
2、$ {}
アリスに渡されたパラメータは、最終処理結果が次のようにしている場合は、この方法でのみ、変数の代入、動的SQLの構文解析段階になり、単純な文字列の置換を行います。
ユーザ名はアリスを '= t_userから選択*;
このような従来のプリコンパイルされたSQLステートメントが既に変数が含まれていない、$ {}は、したがって置換変数動的SQLのステージがステージを解析することが分かります。

おすすめ

転載: www.cnblogs.com/jinyw/p/12389768.html