使用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