hibernateの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 "を入手してください。

2.それを抽出する

3.ライブラリ依存関係を追加する

  • p6spy.jar ** をプロジェクトライブラリの依存関係に追加する

4. P6Spyプロパティファイルを変更する

データベース構成ファイルを変更します。既存のJDBCドライバをP6Spy JDBCドライバ( "com.p6spy.engine.spy.P6SpyDriver")に置き換える必要があります。

Originalは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>

Changed 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文がこのファイルにログインします。

  • Windows **

logfile     = c:/spy.log
  • nix

logfile =/srv/log/spy.log

6. "spy.properties"をプロジェクトのクラスパスにコピーします。

"spy.properties"をプロジェクトのルートフォルダにコピーし、 プロジェクトは "spy.properties"を見つけることができます。それ以外の場合はプロンプトを表示します "spy.properties"ファイルが見つかりません例外。

7.完了

アプリケーションを実行してデータベーストランザクションを実行すると、 アプリケーションからデータベースに送信されたすべてのSQL文がログに記録されます 「spy.properties」で指定したファイルにコピーします。

ログファイルの例を次に示します。

mkyong.stock__transactionに挿入する(CHANGE、CLOSE、DATE、OPEN、STOCK__ID、VOLUME)
値(?、?、?、?、?、?)|
mkyong.stock__transactionに挿入する(CHANGE、CLOSE、DATE、OPEN、STOCK__ID、VOLUME)
値(10.0、1.1、 '2009-12-30'、1.2,11,1000000)

===結論

率直に言って、P6Spyは、 デバッグ時間。あなたのプロジェクトがJDBCドライバを使用している限り 接続すると、P6Sqpはその中に入ることができ、すべてのSQL文と あなたのためのパラメータ値。

Mavenユーザの場合

Mavenを使ってP6Spyの依存関係を `pom.xml`にダウンロードすることができます

<依存関係>
        <groupId> p6spy </groupId>
        <artifactId> p6spy </artifactId>
        <version> 1.3 </version>
    </dependency>

しかし、 "spy.properties"ファイルはパッケージに入っていません。 自分で作成してください。ここでテンプレートをダウンロードできます。 リンク://wp-content/uploads/2008/12/spy.properties.zip[spy.properties] ===リファレンス