将spring JdbcTemplate与预处理语句一起使用时,我们可以单独设置参数值,也可以只传递一个对象数组。
jdbctemplate.update(sql, arg1, arg2);
或
jdbctemplate.update(sql, new Object[]{arg1, arg2});
这两种方法都有效。但我想知道当作为Object数组传递时,jdbctemplate如何知道将数据转换为与数据库列的类型匹配。
两种方法的性能差异是什么?
如何记录在数据库上执行的最终查询。为org.springframework.jdbc包启用DEBUG日志并不适用于我。
答案 0 :(得分:3)
对JdbcTemplate.update
的两次调用没有区别,实际上你的两个调用都采用相同的方法。 JdbcTemplate
具有以下签名
public int update(String sql, Object... args) throws DataAccessException
正如您所看到的,最后一个参数是Java变量参数(...)而不是数组。因此,您可以将单个值或Object数组赋予相同的Variable Argument。
关于JdbcTemplate
知道如何将数据转换为与目标数据类型匹配的问题,它只是根据提交的变量顺序创建PreparedStatement
并调用PreparedStatement.set***
方法参数和值实际上只检查给定值是String
,Date
还是Calendar
并调用PreparedStatement.setString
或PreparedStatement.setTimestamp
。对于其他所有内容PreparedStatement.setObject