首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring JdbcTemplate和NamedParameterJdbcTemplate

Spring JdbcTemplate和NamedParameterJdbcTemplate
EN

Stack Overflow用户
提问于 2016-06-23 16:53:11
回答 1查看 5.8K关注 0票数 1

是否应该使用JDBCTemplateNamedParameterJdbcTemplate,同时使用NamedParameterJdbcTemplate来插入/更新,而JdbcTemplate则负责检索和删除?因为我可以使用简单的NamedParameterJdbcTemplate插入对象,如下所示:

代码语言:javascript
复制
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完成它,如下所示:

代码语言:javascript
复制
List<User> users = jdbcTemplate.query("SELECT * FROM user", BeanPropertyRowMapper.newInstance(User.class));

不需要使用ResultSetRowMapper来检索行。

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

EN

回答 1

Stack Overflow用户

发布于 2016-06-24 08:13:31

您可以在需要时同时使用JdbcTemplateNamedParameterJdbcTemplateJdbcTemplate稍微容易出错,因为"?“的顺序是?占位符以查询和参数顺序显示,您要通过数组或直接设置传递这些占位符。

正如NamedParameterJdbcTemplate所允许的那样,您可以根据名称为参数分配名称并将值映射到参数,这与设置值的顺序无关。

根据NamedParameterJdbcTemplate api文档,

一旦命名参数替换为JDBC样式'?‘,该类将委托给包装的JdbcTemplate。占位符在执行时完成。

因此,在内部api需要一些额外的时间来将命名的params转换为‘’位置持有者,但这可以忽略不计。

我的建议是,如果您的查询有太多的参数与NamedParameterJdbcTemplate一起使用,因为它的安全性和无错误性都适用于JdbcTemplate

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37997533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档