hibernateのSQLパラメータ値を表示する方法 - P6Spy

hibernateのsqlパラメーター値を表示する方法– P6Spy

質問

Hibernate SQLパラメーター値の質問について質問する多くの開発者がいます。 データベースに渡されたHibernate SQLパラメーター値を表示する方法は? Hibernateはすべてのパラメーター値を疑問符(?)として表示するだけです。 show_sqlプロパティを使用すると、Hibernateは生成されたすべてのSQLステートメントを表示しますが、SQLパラメーター値は表示しません。

例えば

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

正確なHibernate SQLパラメーター値を記録または表示する方法はありますか?

ソリューション– P6Spy

さて、質問がある場合は答えがあります〜

P6Spyは、データベースに送信する前にすべてのSQLステートメントとパラメーター値を記録する便利なライブラリです。 P6Spyは無料で、データベースのすべてのSQLステートメントを傍受してログファイルに記録するために使用され、JDBCドライバーを使用するすべてのアプリケーションで機能します。

1. P6Spyライブラリをダウンロードする

p6spy-install.jar」を取得します。ダウンロードするには

2. 抽出する

p6spy-install.jarファイルを抽出し、p6spy.jarspy.propertiesを探します

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

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

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

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

オリジナルはMySQLJDBCドライバー–「com.mysql.jdbc.Driver」


  false
  com.mysql.jdbc.Driver
  password
  jdbc:mysql://localhost:3306/example
  root
  org.hibernate.dialect.MySQLDialect
  true

P6Spy JDBCドライバー–「com.p6spy.engine.spy.P6SpyDriver」に変更しました


  false
  com.p6spy.engine.spy.P6SpyDriver
  
  password
  jdbc:mysql://localhost:3306/example
  root
  org.hibernate.dialect.MySQLDialect
  true

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=

Change the Log file location
logfileプロパティでログファイルの場所を変更すると、すべてのSQLステートメントがこのファイルにログインします。

Windows

logfile     = c:/spy.log

*nix

logfile     = /srv/log/spy.log

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

「spy.properties」をプロジェクトのルートフォルダにコピーし、プロジェクトが「spy.properties」を見つけることができることを確認します。そうしないと、「spy.properties」ファイルが見つかりませんという例外が表示されます。

7. Done

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

サンプルログファイルは次のとおりです。

insert into example.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)
values (?, ?, ?, ?, ?, ?)|
insert into example.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にダウンロードできます。

        
        p6spy
        p6spy
        1.3
    

ただし、「spy.properties」ファイルはパッケージに含まれていないため、自分で作成する必要があります。 ここからテンプレートをダウンロードできます–spy.properties

参照