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此時,在控制檯看到的現象:Hibernate:=true //控制檯是否列印 spring.jpa.properties.hibernate.format_sql=true //格式化sql語句 spring.jpa.properties.hibernate.use_sql_comments=true //指出是什麼操作生成了該語句
可以看到,控制檯列印了一條經過格式化之後的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語句及其引數值的方法,有不對的地方請指正,也歡迎大家分享自己知道的更方便的方法~