NamedParameter JdbcTemplate
NamedParameter JdbcTemplate類
以下の例によって、
好きであれば、名前パラメータを
皆さんは覚えておかなければなりません。
NamedParameterJdbcTemplate
クラスは、SQL文で命名パラメータを使用するサポートを追加しました。以前は、従来のSQL文では、パラメータは'?'
プレースホルダで表されていた。NamedParameterJdbcTemplate
クラスの内部には、一般的なJdbcTemplate
が実装されており、そのエージェントとして大部分の作業を完了する。以下の内容は主にNamedParameterJdbcTemplate
とJdbcTemplate
との違いについて説明します。つまり、SQL文でネーミングパラメータがどのように使用されるかということです。以下の例によって、
NamedParameterJdbcTemplate
の使用パターンをよりよく知ることができます。// some JDBC-backed DAO class...
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(0) from T_ACTOR where first_name = :first_name";
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(this.getDataSource());
SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);
return template.queryForInt(sql, namedParameters);
}
上記の例では、sql
変数は、その対応する値がnamedParameters
変数の中にあるネーミングパラメータのプレースホルダ「first_uname」を使用している(タイプはMapSqlParameterSource
)。好きであれば、名前パラメータを
NamedParameterJdbcTemplate
に伝えるために、Mapスタイルに基づく名前値を使用してもよい(NamedParameterJdbcTemplate
はNamedParameterJdbcOperations
インターフェースを実現し、残りの作業はインターフェースを呼び出す対応する方法によって達成され、ここではもはや説明しない)。// some JDBC-backed DAO class...
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(0) from T_ACTOR where first_name = :first_name";
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(this.getDataSource());
Map namedParameters = new HashMap();
namedParameters.put("first_name", firstName);
return template.queryForInt(sql, namedParameters);
}
もう一つの言及すべき特性は、NamedParameterJdbcTemplate
と同じパケット中にあるSqlParameterSource
インターフェースである。前のコードクリップでは、MapSqlParameterSource
の命名パラメータのソースとして使用できるインターフェースの実装を見ました。SqlParameterSource
クラスは非常に簡単に実現されています。NamedParameterJdbcTemplate
アダプターだけです。もちろんその使い方は自明です。皆さんは覚えておかなければなりません。
MapSqlParameterSource
類の内部包装には標準のjava.util.Map
類があります。NamedParameterJdbcTemplate
にアクセスするために、内部のJdbcTemplate
例(例えば、JdbcTemplate
にアクセスするいくつかの方法)にアクセスする必要がある場合、JdbcTemplate
方法を使用して戻ってくるgetJdbcOperations()
インターフェースが必要です。(JdbcOperations
は、JdbcTemplate
インターフェースを実現している)。JdbcOperations
クラスは、各動作時に、新しいNamedParameterJdbcTemplate
を実装するのではなく、各NamedParameterJdbcTemplate
に対して、Spring IoC容器にSpring IoCを使用して構成するように、1つのDataSource
例だけを構成し、これらのクラスを使用するDAOでこの例を共有するスレッドセキュリティである。