2013-05-03 32 views
28

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

+3

なぜjavadocを読んでいないのですか?その違いが何であるか説明できるかもしれないと思いませんか?パフォーマンスに関しては、クエリが作成されて実行される方法はそれほど重要ではありません。重要なのはクエリそのものです。 –

答えて

4

パフォーマンスには差がありません。 NamedParameterJdbcTemplateは、名前付きパラメータを使用できる便利な機能です。 本当に興味がある人は、すぐにダウンロードできるソースコードを見てください。 ソースコードを読んでいると、私がフォーラムで得た回答にもっと自信があります。

53

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コードとは別のファイルに格納されています。間違った順序でパラメータを誤って取得するのは簡単です。

+0

他の違いはありますか? – Sarma

+3

@サルマ:それは非常に具体的な質問ではありません。詳細が必要な場合は、ソースコードをチェックアウトすることができます。 –

+0

NamedParameterJdbcTemplateとJdbcTemplateの両方を同じデータソースで使用することは可能ですか?彼らは互いに干渉しますか? – MaxG

関連する問題