Hibernate在控制台打印sql语句以及参数


最近在工作中使用hibernate,遇到了sql语句错误,为了查看具体的错误,整理了hibernate在控制台及日志打印sql语句及参数的方法


环境说明

IntelliJ IDEA 2017.3.4 版本;SpringBoot 2.0.0.RELEASE;hibernate用的是JPA自带。


打印sql语句到控制台

首先,我使用的是application.properties配置文件,使用yml也可以达到同样的效果。

在网上查这个问题查了好久,基本上都是xml配置,在此不多说;

正确的properties配置项应该如下图所示:

在jpa下一级不直接是hibernate,而是properties。

spring.jpa.properties.hibernate.show_sql=true          //控制台是否打印
spring.jpa.properties.hibernate.format_sql=true        //格式化sql语句
spring.jpa.properties.hibernate.use_sql_comments=true  //指出是什么操作生成了该语句
此时,在控制台看到的现象:Hibernate: 

    

可以看到,控制台打印了一条经过格式化之后的sql语句,并标明了这条语句是在Hibernate插入TaskWebSiteRev这个对象到数据库的时候生成的。


打印sql语句中的参数值

经过上面的步骤,我们已经可以在控制台打印出格式化之后的sql语句,但是大多数情况下,我们还需要具体的sql参数值,这个时候我们就需要配置 日志配置文件

博主使用的是slf4j的日志,配置文件用的是logback.xml,配置方式如下:

<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>

直接把这三个配置丢到xml的根节点下就可以~来看一下效果:


可以看到控制台依次输出了sql参数,并且将这些参数在数据库中的类型也一并输出了。


打印sql语句到日志

在上述步骤的基础上,在logback.xml中增加两项配置:

<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="TRACE"/>

这样就会在日志中将sql语句打印出来,在无法查看控制台的情况下,就可以使用这个方法啦。效果如图所示:



注:

以上提到的配置如果全部配置,在控制台会有冗余的打印信息:


建议根据需要,只配置打印到控制台或打印到日志其中一种。


以上就是hibernate在控制台输出sql语句及其参数值的方法,有不对的地方请指正,也欢迎大家分享自己知道的更方便的方法~

  • 15
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
可以通过在idea控制台中启用SQL日志来查看虚拟机最终执行的SQL语句。具体操作如下: 1. 在idea中打开要查看SQL日志的项目。 2. 在项目中找到数据库配置文件,通常是application.yml或application.properties。 3. 在配置文件中添加以下配置: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true driver-class-name: com.mysql.cj.jdbc.Driver username: root password: password hikari: logging: enabled: true level: DEBUG ``` 这里以MySQL数据库为例,配置中的url、username和password需要根据实际情况进行修改。 4. 重新启动项目,在控制台中可以看到SQL语句的执行情况,包括执行的SQL语句和执行时间等信息。 ```text 2021-01-01 12:00:00.000 DEBUG 12345 --- [ XNIO-1 task-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Connection com.mysql.cj.jdbc.ConnectionImpl@123456 acquired in 2ms 2021-01-01 12:00:00.001 DEBUG 12345 --- [ XNIO-1 task-1] org.hibernate.SQL : insert into user (id, name, age) values (null, ?, ?) 2021-01-01 12:00:00.002 TRACE 12345 --- [ XNIO-1 task-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [test] 2021-01-01 12:00:00.002 TRACE 12345 --- [ XNIO-1 task-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [INTEGER] - [18] 2021-01-01 12:00:00.003 DEBUG 12345 --- [ XNIO-1 task-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Connection com.mysql.cj.jdbc.ConnectionImpl@123456 is closed. ``` 可以根据日志中的SQL语句参数来判断虚拟机最终执行的SQL语句是否符合预期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值