【问题标题】:How spring JdbcTemplate recognizes data types?spring JdbcTemplate 如何识别数据类型?
【发布时间】:2016-11-04 04:29:28
【问题描述】:

当使用带有预处理语句的 spring JdbcTemplate 时,我们可以单独设置参数值,也可以只传递一个对象数组。

jdbctemplate.update(sql, arg1, arg2);

jdbctemplate.update(sql, new Object[]{arg1, arg2});

这两种方法都有效。但我想知道 jdbctemplate 在作为对象数组传递时如何知道将数据转换为与数据库列的类型匹配。

两种方法有性能差异吗?

如何记录在数据库上执行的最终查询。为 org.springframework.jdbc 包启用调试日志对我不起作用。

【问题讨论】:

    标签: java sql spring jdbctemplate


    【解决方案1】:

    JdbcTemplate.update 的两次调用没有区别,事实上,您的两次调用都使用相同的方法。 JdbcTemplate中只有一个update方法

    签名如下

    public int update(String sql, Object... args) throws DataAccessException 
    

    如您所见,最后一个参数是 Java 变量参数 (...) 而不是数组。因此,您可以为同一个变量参数提供单个值或对象数组。

    对于JdbcTemplate 如何知道将数据转换为与目标数据类型匹配的问题,它只是创建一个PreparedStatement 并根据提交的变量参数和值的顺序调用PreparedStatement.set*** 方法,实际上只有检查给定值是否为StringDateCalendar 并调用PreparedStatement.setStringPreparedStatement.setTimestamp。对于其他一切只需PreparedStatement.setObject

    【讨论】:

    • 非常感谢您的详细解答。你能解决我最后一个关于日志记录的问题吗?
    • 要记录查询和参数,请将 org.springframework.jdbc.core 日志记录级别设置为 TRACE。如果您使用的是 spring-boot,那么设置属性 logging.level.org.springframework.jdbc.core=TRACE 可能就足够了。
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2021-12-26
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多