在Spring JdbcTemplate中查看底层SQL?

Art*_*tem 55 sql jdbc spring-jdbc

我正在学习JdbcTemplate和NamedParameterJdbcTemplate的奇迹.我喜欢我所看到的,但有没有简单的方法来查看它最终执行的底层SQL?我希望看到这个用于调试目的(例如,在外部工具中调试生成的SQL).

Bal*_*usC 48

Spring文档说,他们在DEBUG级别记录:

此类发出的所有SQL都记录在与模板实例的完全限定类名对应的类别下的DEBUG级别(通常为JdbcTemplate,但如果使用JdbcTemplate类的自定义子类,则可能会有所不同).

在XML术语中,您需要将记录器配置为:

<category name="org.springframework.jdbc.core.JdbcTemplate">
    <priority value="debug" />
</category>
Run Code Online (Sandbox Code Playgroud)

然而,这个主题在一个月前就在这里进行了讨论,并且它似乎不像在Hibernate中那样容易上班和/或它没有返回预期的信息:Spring JDBC没有使用log4j记录SQL每个下面的主题建议使用P6Spy根据这篇文章,它也可以集成在Spring中.

  • 使用名称“org.springframework.jdbc”,也可以看到真正的 SQL 查询。 (2认同)

Kro*_*oky 34

这适用于org.springframework.jdbc-3.0.6.RELEASE.jar.我在Spring文档的任何地方都找不到这个(也许我只是懒惰)但是我发现(试验和错误)TRACE级别做了魔术.

我正在使用log4j-1.2.15以及slf4j(1.6.4)和属性文件来配置log4j:

log4j.logger.org.springframework.jdbc.core = TRACE
Run Code Online (Sandbox Code Playgroud)

这将显示SQL语句和绑定参数,如下所示:

Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME]
Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown
Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown
Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown
Run Code Online (Sandbox Code Playgroud)

不确定SQL类型未知但我想我们可以在这里忽略它

对于一个SQL(即如果你对绑定的参数值不感兴趣)DEBUG就足够了.

  • 我认为这可能适用于jdbc,但没有jdbctemplate.也不适合我 (2认同)

Vla*_*liy 19

我将此行用于 Spring Boot 应用程序:

logging.level.org.springframework.jdbc.core = TRACE
Run Code Online (Sandbox Code Playgroud)

这种方法非常普遍,我通常将它用于我的应用程序中的任何其他类。

  • 我认为没有办法通过注释来做到这一点,只能使用属性文件或 logback.xml。我什至无法想象为什么这应该在注释级别可用 (4认同)

bra*_*ell 7

参数值似乎打印在TRACE级别.这对我有用:

log4j.logger.org.springframework.jdbc.core.JdbcTem plate=DEBUG, file
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file
Run Code Online (Sandbox Code Playgroud)

控制台输出:

02:40:56,519 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 1, parameter value [Tue May 31 14:00:00 CEST 2005], value class [java.util.Date], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 2, parameter value [61], value class [java.lang.Integer], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 3, parameter value [80], value class [java.lang.Integer], SQL type unknown
Run Code Online (Sandbox Code Playgroud)