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ドライバを使用するすべてのアプリケーションで使用できます。
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]
===リファレンス