使用hibernate时,咱们经常须要查看hibernate实际提交到数据库的SQL及相关参数。这里提供几种方案,供你们在开发中使用。html
这也许是最简单的一种配置。咱们只须要为hibernate配置一个参数,就能够在console中打印出SQL语句。spring
须要增长的仅仅是这个参数(其它参数略去):sql
|
与打印SQL语句相关的配置,还有两个:format_sql和use_sql_comments。顾名思义,他们配置的是打印SQL时是否进行格式化、以及是否打印出相关的注释。字体
可是,hibernate本身的配置中,彷佛不能将参数绑定到SQL上,SQL语句中只有问号占位符。spa
若是使用log4j,咱们须要作的就是为hibernate相应的类配置logger和appender。appender的配置略去(开发中通常就配置为console),logger配置以下:
|
|
上面的配置中,org.hibernate.SQL的日志配置的效果与show_sql=true的配置果类似,都会把SQL语句打印出来。而org.hibernate.type的日志配置,则会把SQL中占位符对应的参数打印出来。二者结合起来,日志结果以下:
Hibernate: INSERT INTO mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)VALUES (?, ?, ?, ?, ?, ?)13:33:07,253 DEBUG FloatType:133 - binding '10.0' to parameter: 1 13:33:07,253 DEBUG FloatType:133 - binding '1.1' to parameter: 2 13:33:07,253 DEBUG DateType:133 - binding '30 December 2009' to parameter: 3 13:33:07,269 DEBUG FloatType:133 - binding '1.2' to parameter: 4 13:33:07,269 DEBUG IntegerType:133 - binding '11' to parameter: 5 13:33:07,269 DEBUG LongType:133 - binding '1000000' to parameter: 6
可是,尽管这种方式可以把SQL和参数都打印出来,可是两者倒是分开打印的。若是一段时间内执行的SQL很是多,那么这部分日志会比较的杂乱,对于开发来讲帮助并不大。
P6Spy是一个能够用来在应用程序中拦截和修改数据操做语句的开源框架。 经过P6Spy咱们能够对SQL语句进行拦截,至关于一个SQL语句的记录器。使用P6spy,咱们须要的配置比较复杂,清单以下。
绝对不要把这些配置提交到上线代码中!
首先,咱们须要引入相关jar包。
pom.xml
|
第二,咱们须要“处理”一下数据源配置。
spring-db.xml
|
最后,咱们须要为p6spy增长一个配置文件,放到resource路径下。其中可配置项不少,咱们能够只配置一部分(例如示例中的三项)。完整配置能够查看他们的官网。
p6spy.properties
|
配置好以后,spy.log中应该会有这样的输出。红色字体部分就是带有参数的SQL语句。
1485070310889|0|statement|connection 10|select companyacc0_.id as id1_24_, companyacc0_.balance as balance2_24_, companyacc0_.lastUpdateTime as lastUpda3_24_, companyacc0_.type as type4_24_ from company_accounts companyacc0_ where companyacc0_.type=?|select companyacc0_.id as id1_24_, companyacc0_.balance as balance2_24_, companyacc0_.lastUpdateTime as lastUpda3_24_, companyacc0_.type as type4_24_ from company_accounts companyacc0_ where companyacc0_.type='MAIN'
使用hibernate的show_sql方式配置:http://www.mkyong.com/hibernate/hibernate-display-generated-sql-to-console-show_sql-format_sql-and-use_sql_comments/
使用Log4j配置:http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-log4j/
使用P6spy配置:http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/
P6spy官方配置说明:http://p6spy.readthedocs.io/en/latest/configandusage.html