mapsqlparametersource vs java.util.map

时间:2017-03-02 21:01:09

标签: java spring spring-jdbc

我在Spring文档中读到MapSqlParameterSource只是Map的一个包装器。使用MapSqlParameterSource而不是Map?

的优点是什么?
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);
}

1 个答案:

答案 0 :(得分:2)

MapSqlParameterSource只是LinkedHashMap的装饰者,如果您查看MapSqlParameterSource,您会看到:

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

使用地图或弹簧提供的实施方式实际上并没有相当大的好处。

如果您在代码上稍微挖掘一下,可以在代码下方使用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)...

因此,使用MapMapSqlParameterSource

只是一种品味问题