spring JdbcTemplate是如何识别数据类型的?
How spring JdbcTemplate recognizes data types?
将spring JdbcTemplate 与准备好的语句一起使用时,我们可以单独设置参数的值,也可以只传递一个对象数组。
jdbctemplate.update(sql, arg1, arg2);
或
jdbctemplate.update(sql, new Object[]{arg1, arg2});
两种方法都有效。但我想知道 jdbctemplate 如何知道在作为对象数组传递时将数据转换为与数据库列的类型相匹配。
两种方法有性能差异吗?
如何记录在数据库上执行的最终查询。为 org.springframework.jdbc 包启用 DEBUG 日志对我不起作用。
对 JdbcTemplate.update
的两次调用没有区别,事实上,您的两次调用都转到相同的方法。 JdbcTemplate
中只有一个update方法
具有以下签名
public int update(String sql, Object... args) throws DataAccessException
如您所见,最后一个参数是 Java 变量参数 (...) 而不是数组。因此,您可以为同一个变量参数提供单独的值或对象数组。
对于 JdbcTemplate
如何知道将数据转换为与目标数据类型相匹配的问题,它只是创建一个 PreparedStatement
并根据以下顺序调用 PreparedStatement.set***
方法提交变量参数和值,实际上只检查给定值是否为 String
、Date
或 Calendar
,并调用 PreparedStatement.setString
或 PreparedStatement.setTimestamp
。对于其他所有内容,只需 PreparedStatement.setObject
将spring JdbcTemplate 与准备好的语句一起使用时,我们可以单独设置参数的值,也可以只传递一个对象数组。
jdbctemplate.update(sql, arg1, arg2);
或
jdbctemplate.update(sql, new Object[]{arg1, arg2});
两种方法都有效。但我想知道 jdbctemplate 如何知道在作为对象数组传递时将数据转换为与数据库列的类型相匹配。
两种方法有性能差异吗?
如何记录在数据库上执行的最终查询。为 org.springframework.jdbc 包启用 DEBUG 日志对我不起作用。
对 JdbcTemplate.update
的两次调用没有区别,事实上,您的两次调用都转到相同的方法。 JdbcTemplate
具有以下签名
public int update(String sql, Object... args) throws DataAccessException
如您所见,最后一个参数是 Java 变量参数 (...) 而不是数组。因此,您可以为同一个变量参数提供单独的值或对象数组。
对于 JdbcTemplate
如何知道将数据转换为与目标数据类型相匹配的问题,它只是创建一个 PreparedStatement
并根据以下顺序调用 PreparedStatement.set***
方法提交变量参数和值,实际上只检查给定值是否为 String
、Date
或 Calendar
,并调用 PreparedStatement.setString
或 PreparedStatement.setTimestamp
。对于其他所有内容,只需 PreparedStatement.setObject