JdbcTemplate的update()方法用于执行INSERT、UPDATE、DELETE语句。它支持三种参数传递方式:
- 直接传递参数值:
String sql = "UPDATE user SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, "John", 1);
- 直接在执行方法中传递参数值,这适用于简单语句的参数传递
- 使用对象的参数源:
- BeanPropertySqlParameterSource:从JavaBean中自动提取参数值
- MapSqlParameterSource:从Map中手动指定参数值
User user = new User("John", 1);
BeanPropertySqlParameterSource params = new BeanPropertySqlParameterSource(user);
String sql = "UPDATE user SET name = :name WHERE id = :id";
jdbcTemplate.update(sql, params);
- :name和:id是命名参数,会从params中获取对应的值
2. 使用PreparedStatementSetter接口:
jdbcTemplate.update(sql, new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, "John");
ps.setInt(2, 1);
}
});
- 实现PreparedStatementSetter接口,在setValues()方法中设置参数值
- 这种方式可以完全控制参数设置的过程
所以,JdbcTemplate提供三种参数传递方式:
- 直接传递:简单但不安全
- 使用参数源:简单安全
- 使用PreparedStatementSetter:可控但稍微复杂
根据SQL语句的复杂性以及安全性要求选择不同的方式,也可混合多种方式,这使参数传递变得非常灵活。
相比直接使用PreparedStatement,JdbcTemplate的更新方法通过提供多种参数传递方式,简化了参数设置过程,屏蔽了底层细节,这体现了它易于使用的设计理念。