2017-03-02 18 views
0

MapSqlParameterSourceはマップ上の単なるラッパーです。マップの代わりにMapSqlParameterSourceを使用する利点は何ですか?mapsqlparametersourceとjava.util.mapとの比較

private final Map<String, Object> values = new LinkedHashMap<String, Object>(); 

実装を提供したマップや、スプリングを使用して、かなりの利点は、実際にはありません。

public int countOfActorsByFirstName(String firstName) { 

    String sql = "select count(*) from T_ACTOR where first_name = :first_name"; 

    SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName); 

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class); 
} 




public int countOfActorsByFirstName(String firstName) { 

    String sql = "select count(*) from T_ACTOR where first_name = :first_name"; 

    Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName); 

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class); 
} 
+0

を使用しないための単なる好みの問題です。ジェネリックをサポートしていないJavaバージョンを使用している可能性があった時代から残っているのは残念です。 – Kayaman

+1

javadocが示しているように、パラメータを埋める流暢なAPI、パラメータのSQL型を指定することが可能です。 –

答えて

1

MapSqlParameterSourceあなたがMapSqlParameterSourceをチェックすると、あなたはこれを見ます、LinkedHashMapだけデコレータです。

あなたはコードを少し掘る場合は、コードの下に、addValueを使用することができます。あなたが好きならば、あなたが見ることができるよう、

public MapSqlParameterSource addValue(String paramName, Object value) { 
    Assert.notNull(paramName, "Parameter name must not be null"); 
    this.values.put(paramName, value); 
    if (value instanceof SqlParameterValue) { 
     registerSqlType(paramName, ((SqlParameterValue) value).getSqlType()); 
    } 
    return this; 
} 

そうは、addValue(同じオブジェクト、あなたが使用することができ返します)のような、流暢なメソッド呼び出しを行うには:

.addValue("a", 1).addValue("b", 2)... 

だから、それは現在、何もMapまたはMapSqlParameterSource

+0

MapSqlParameterSourceを使用することの欠点は、新しいMapSqlParameterSource(MapSqlParameterSource)コンストラクターが欠落していることです。 I.既に設定されているパラメータを再利用することはできません。たとえば、レポートを作成するときに、さまざまな追加引数を持つ複数のステートメントの期間の開始日と終了日を再利用したいとします。この場合、従来のマップを使用する必要があります。新しいMapSqlParameterSource(periodParams).addValue( "additionalParam"、foobar); ' –

関連する問題