NamedParameter JdbcTemplate


NamedParameter JdbcTemplate類NamedParameterJdbcTemplateクラスは、SQL文で命名パラメータを使用するサポートを追加しました。以前は、従来のSQL文では、パラメータは'?'プレースホルダで表されていた。NamedParameterJdbcTemplateクラスの内部には、一般的なJdbcTemplateが実装されており、そのエージェントとして大部分の作業を完了する。以下の内容は主にNamedParameterJdbcTemplateJdbcTemplateとの違いについて説明します。つまり、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スタイルに基づく名前値を使用してもよい(NamedParameterJdbcTemplateNamedParameterJdbcOperationsインターフェースを実現し、残りの作業はインターフェースを呼び出す対応する方法によって達成され、ここではもはや説明しない)。
// 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でこの例を共有するスレッドセキュリティである。