建议JDBCTemplate
和NamedParameterJdbcTemplate
使用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));
无需使用ResultSet
和RowMapper
来检索行。
我担心的是,如果使用JDBCTemplate
和NamedParameterJdbcTemplate
同时存在任何性能问题。
答案 0 :(得分:3)
只要需要,您就可以同时使用JdbcTemplate
和NamedParameterJdbcTemplate
。 JdbcTemplate
稍微容易出错,因为&#34;?&#34;查询中存在的占位符以及通过数组或直接设置的参数顺序都是重要的。
NamedParameterJdbcTemplate
允许您为参数指定名称并按名称将值映射到参数的位置,您设置值的顺序无关紧要。
根据NamedParameterJdbcTemplate
api doc,
一旦从命名参数替换为JDBC样式,该类将委托给一个包装好的JdbcTemplate&#39;?&#39;占位符在执行时完成。
因此内部api需要一些额外的时间将Named params转换为“?&#39;占位符,但这可以忽略不计。
我的建议是,如果您的查询参数太多,请使用NamedParameterJdbcTemplate
,因为其安全且无错误,请使用JdbcTemplate
。