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语句打印出来,在无法查看控制台的情况下,就可以使用这个方法啦。效果如图所示:

 

 

注:

 

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

 

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

要使用log4j打印sql语句控制台,我们需要配置log4j的相关参数。 首先,我们需要在项目中引入log4j的依赖包。然后,在项目的classpath下创建一个log4j.properties文件。 在log4j.properties文件中,我们可以指定log4j的配置信息。以下是一个示例的配置: log4j.rootLogger=DEBUG, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] - %m%n log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE 上述配置设置了根日志级别为DEBUG,并配置了一个ConsoleAppender用于控制台打印输出。我们还可以设置日期格式、日志输出格式等。 在log4j.logger下,我们可以指定不同包名对应的日志级别。例如,上述配置指定了org.hibernate.SQL的日志级别为DEBUG,表示打印SQL查询语句的日志级别为DEBUG。同时,指定了org.hibernate.type的日志级别为TRACE,表示打印SQL参数绑定的日志级别为TRACE。 当我们在代码中使用hibernate进行数据库操作时,log4j会将相应的SQL语句打印控制台上。 需要注意的是,为了使log4j的配置生效,我们需要在项目启动时加载log4j配置文件。可以在项目的启动类中添加如下代码: PropertyConfigurator.configure("log4j.properties"); 通过以上步骤,我们就可以使用log4j打印SQL语句控制台了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值