java - mapsqlparametersource 与 java.util.map

标签 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);
}

最佳答案

MapSqlParameterSource 只是 LinkedHashMap 的装饰器,如果您检查 MapSqlParameterSource,您将看到以下内容:

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

使用map或spring提供的实现实际上并没有多大的好处。

如果您深入了解代码,可以使用代码下方的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只是一个品味问题

关于java - mapsqlparametersource 与 java.util.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42565862/

相关文章:

Java - 接口(interface)内的实现实例

java - RadioGroupFieldEditor setPropertyChangeListener

java - 如何将一个 spring bean 的父属性设置为另一个 bean 的属性?

java - Spring 数据 JPA : find nested object

eclipse - 如何在Spring中使用STS在root-context.xml文件中配置Bean类?

java - Java 中的 UTF-8 字符在 MySQL 中变成无效字符

java - 尝试传递自定义 oracle 类型对象映射时名称模式无效

java - 我们可以在 Android 编程中使用 Optionals 吗?

java - 为什么我的 Android 应用程序找不到 XML 文件中声明的 TextView 或按钮?

java - Spring 不会在运行时发现新上下文的 @RequestMapping 注释