Spring JdbcTemplate和NamedParameterJdbcTemplate

时间:2016-06-23 16:53:11

标签: spring spring-data dao spring-jdbc jdbctemplate

建议JDBCTemplateNamedParameterJdbcTemplate使用NamedParameterJdbcTemplate用于插入/更新JdbcTemplate负责检索和删除?因为我可以使用NamedParameterJdbcTemplate插入对象,如下所示:

public long save(Domain obj) {

    String sql = "insert into domain(name,password,salt,dnspod_domain_id,status)" +
            " values(:name,:password,:salt,:dnspodDomainId,:status)";

    KeyHolder keyHolder = new GeneratedKeyHolder();
    namedJdbc.update(sql, new BeanPropertySqlParameterSource(obj), keyHolder);

    return keyHolder.getKey().longValue();
}

如果我想使用JDBCTemplate将对象/数据插入表中,我将不得不手动编写大量代码,并使用PreparedStatement ...

分配参数

在检索方面,我可以通过JDBCTemplate执行此操作,如下所示:

List<User> users = jdbcTemplate.query("SELECT * FROM user", BeanPropertyRowMapper.newInstance(User.class));

无需使用ResultSetRowMapper来检索行。

我担心的是,如果使用JDBCTemplateNamedParameterJdbcTemplate同时存在任何性能问题。

1 个答案:

答案 0 :(得分:3)

只要需要,您就可以同时使用JdbcTemplateNamedParameterJdbcTemplateJdbcTemplate稍微容易出错,因为&#34;?&#34;查询中存在的占位符以及通过数组或直接设置的参数顺序都是重要的。

NamedParameterJdbcTemplate允许您为参数指定名称并按名称将值映射到参数的位置,您设置值的顺序无关紧要。

根据NamedParameterJdbcTemplate api doc,

  

一旦从命名参数替换为JDBC样式,该类将委托给一个包装好的JdbcTemplate&#39;?&#39;占位符在执行时完成。

因此内部api需要一些额外的时间将Named params转换为“&#39;占位符,但这可以忽略不计。

我的建议是,如果您的查询参数太多,请使用NamedParameterJdbcTemplate,因为其安全且无错误,请使用JdbcTemplate