如何显示休眠SQL参数值– P6Spy

有很多开发人员在询问Hibernate SQL参数值问题。 如何显示传递给数据库的Hibernate SQL参数值? Hibernate只是将所有参数值显示为问号(?)。 使用show_sql属性,Hibernate将显示所有生成的SQL语句,但不显示SQL参数值。

例如

Hibernate: insert into mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME) 
values (?, ?, ?, ?, ?, ?)

有没有办法记录或显示确切的Hibernate SQL参数值?

解决方案– P6Spy

好吧,如果有一个问题有一个答案〜

P6Spy是一个有用的库,用于记录所有SQL语句和参数值,然后再将其发送到数据库。 P6Spy是免费的,可用于拦截所有数据库SQL语句并将其记录到日志文件中,并且适用于任何使用JDBC驱动程序的应用程序。

1.下载P6Spy库

获取“ p6spy-install.jar ”,可以从以下位置下载

  1. P6Spy官方网站
  2. Sourceforge.net上的P6Spy

2.解压

提取p6spy-install.jar文件,查找p6spy.jarspy.properties

3.添加库依赖

p6spy.jar添加到您的项目库依赖项中

4.修改P6Spy属性文件

修改数据库配置文件。 您需要用P6Spy JDBC驱动程序替换现有的JDBC驱动程序–“ com.p6spy.engine.spy.P6SpyDriver

最初是MySQL JDBC驱动程序–“ com.mysql.jdbc.Driver”

<session-factory>
  <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkyong</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
</session-factory>

将其更改为P6Spy JDBC驱动程序–“ com.p6spy.engine.spy.P6SpyDriver”

<session-factory>
  <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
  <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver
  </property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkyong</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
</session-factory>

5.修改P6Spy属性文件

修改P6Spy属性文件–“ spy.properties

用您现有的MySQL JDBC驱动程序替换“真实驱动程序”

realdriver=com.mysql.jdbc.Driver

#specifies another driver to use
realdriver2=
#specifies a third driver to use
realdriver3=

更改日志文件位置
logfile属性中更改日志文件的位置,所有SQL语句都将登录到该文件。

视窗

logfile     = c:/spy.log

*尼克斯

logfile     = /srv/log/spy.log

6.将“ spy.properties”复制到项目类路径

将“ spy.properties”复制到项目的根文件夹,确保您的项目可以找到“ spy.properties”,否则将提示“ spy.properties”文件未找到异常。

7.完成

运行您的应用程序并执行一些数据库事务,您会注意到从应用程序发送到数据库的所有SQL语句都将登录到您在“ spy.properties”中指定的文件中。

样本日志文件如下。

insert into mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME) 
values (?, ?, ?, ?, ?, ?)|
insert into mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME) 
values (10.0, 1.1, '2009-12-30', 1.2, 11, 1000000)

结论

坦率地说,P6Spy在减少开发人员的调试时间方面非常有用。 只要您的项目使用JDBC驱动程序进行连接,P6Sqp都可以启动它并为您记录所有SQL语句和参数值。

对于Maven用户

您可以使用Maven将P6Spy依赖项下载到pom.xml

<dependency>
		<groupId>p6spy</groupId>
		<artifactId>p6spy</artifactId>
		<version>1.3</version>
	</dependency>

但是,“ spy.properties”文件未包含在软件包中,您必须自己创建它。 您可以在此处下载模板– spy.properties

参考

  1. P6Spy配置

翻译自: https://mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值