私は Spring3.x の初心者で、Spring DAO サポートを学んでいます。と の違いを知りたいNamedParameterJdbcTemplate
ですJdbcTemplate
。性能的にはどちらが優れているか。そして、いつ行くべきかNamedParameterJdbcTemplate
、いつ行くべきかJdbcTemplate
。
56842 次
2 に答える
83
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 コードとは別のファイルに保存しているため、間違った順序で誤ってパラメーターを取得することがよくあります。
于 2013-05-03T15:08:46.060 に答える