web-dev-qa-db-ja.com

NamedParameterJdbcTemplate vs JdbcTemplate

私はSpring3.xの初心者で、Spring DAOのサポートを学んでいます。 NamedParameterJdbcTemplateとJdbcTemplateの違いを知りたい。パフォーマンスの面でどちらが最適か。そして、NamedParameterJdbcTemplateに行くときと、JdbcTemplateに行くとき。あなたの答えは私のような初心者に大いに役立ちます。

34
Ashok

JdbcTemplateを使用する場合、SQLに代入する各パラメーターの?プレースホルダーを持つSQLを指定します。コードでパラメーターを割り当てる場合、引数を配列で渡す必要があり、次のように配列に表示される順序で使用されます。

Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);

したがって、実行されるSQLはselect * from foo where a = 'x' and b = 'y'です。

NamedParameterJdbcTemplateを使用すると、パラメータープレースホルダーに名前を割り当ててマップを渡すことができるので、テンプレートはマップ名をプレースホルダーに一致させることができます。したがって、コードは次のようになります。

String sql = "select * from foo where a = :mya and b = :myb";
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("mya", "x");
argMap.put("myb", "y");
namedParameterJdbcTemplate.query(sql, argMap, resultSetExtractor);

最初の例と同じSQLを生成します(クエリの実行は時間のかかる部分です。引数挿入のパフォーマンスは問題ではありません)。

名前による引数の一致は、特定の順序で引数を指定するよりもエラーが発生しにくいという考え方です。実際のアプリケーションでは、通常、SQLはDAOコードとは別のファイルに保存され、誤った順序でパラメーターを誤って取得する可能性があります。

62
Nathan Hughes

測定可能な差のパフォーマンスはありません。 NamedParameterJdbcTemplateは、名前付きパラメーターを使用できる便利なツールです。あなたが本当に興味があるなら、すぐにダウンロードできるソースコードを見てください。ソースコードを読むことで、フォーラムで得た答えに自信を持つことができます。

4
Xenson