1. 程式人生 > >Hibernate在控制檯列印sql語句以及引數

Hibernate在控制檯列印sql語句以及引數

最近在工作中使用hibernate,遇到了sql語句錯誤,為了檢視具體的錯誤,整理了hibernate在控制檯及日誌列印sql語句及引數的方法

環境說明

IntelliJ IDEA 2017.3.4 版本;SpringBoot 2.0.0.RELEASE;hibernate用的是JPA自帶。

列印sql語句到控制檯

首先,我使用的是application.properties配置檔案,使用yml也可以達到同樣的效果。

在網上查這個問題查了好久,基本上都是xml配置,在此不多說;

正確的properties配置項應該如下圖所示:

在jpa下一級不直接是hibernate,而是properties。

spring.jpa.properties.hibernate.show_sql
=true         //控制檯是否列印 spring.jpa.properties.hibernate.format_sql=true        //格式化sql語句 spring.jpa.properties.hibernate.use_sql_comments=true //指出是什麼操作生成了該語句
此時,在控制檯看到的現象:Hibernate: 

    

可以看到,控制檯列印了一條經過格式化之後的sql語句,並標明瞭這條語句是在Hibernate插入TaskWebSiteRev這個物件到資料庫的時候生成的。

列印sql語句中的引數值

經過上面的步驟,我們已經可以在控制檯打印出格式化之後的sql語句,但是大多數情況下,我們還需要具體的sql引數值,這個時候我們就需要配置 日誌配置檔案

博主使用的是slf4j的日誌,配置檔案用的是logback.xml,配置方式如下:

<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>

直接把這三個配置丟到xml的根節點下就可以~來看一下效果:


可以看到控制檯依次輸出了sql引數,並且將這些引數在資料庫中的型別也一併輸出了。

列印sql語句到日誌

在上述步驟的基礎上,在logback.xml中增加兩項配置:

<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="TRACE"/>

這樣就會在日誌中將sql語句打印出來,在無法檢視控制檯的情況下,就可以使用這個方法啦。效果如圖所示:


注:

以上提到的配置如果全部配置,在控制檯會有冗餘的列印資訊:


建議根據需要,只配置列印到控制檯或列印到日誌其中一種。

以上就是hibernate在控制檯輸出sql語句及其引數值的方法,有不對的地方請指正,也歡迎大家分享自己知道的更方便的方法~