顯示出Hibernate查詢語句的繫結引數值

2021-06-16 14:54:31 字數 3437 閱讀 8743

在使用 hibernate 進行資料庫操作的時候可以顯示出所執行的 sql 語句,相信用 hibernate 的兄弟姐妹們都知道怎麼設定。就設定 hibernate.show_sql  或者 show_sql 屬性為 true 就行,在 hibernate.cfg.xml 或者與 spring 整合時配置在 spring 的配置檔案中。再就是要讓顯示的 sql 語句是格式化的,就配置 hibernate.format_sql 或是 format_sql 為 true,否則總在一行中執行。hibernate 顯示的 sql 語句好像是通過 system.out.println() 直接輸出的。

hibernate 大部份時候是通過 preparedstatement 來執行 sql 語句的,它的好處是可預處理、被快取,可防止注入。只是這樣讓 hibernate 執行的 sql 語句輸出到控制台是帶問號的,如: 01

02

03

04

05

06

07

08

09

10

11

hibernate:

select

formtempla0_.idasid6_,

formtempla0_.nameasname6_,

formtempla0_.titleastitle6_,

formtempla0_.finish_messageasfinish4_6_,

formtempla0_.promotion_codeaspromotion5_6_

from

footnotedpro.form_templates formtempla0_

where

formtempla0_.name=?

我們有時候很想知道此時繫結給這個 ?號具體是什麼值,但預設情況下在日誌中是沒有顯示出來的,因為輸出它的 level 級別是 trace,而我們用 log4j 或 slf4j 開發時預設級別一般最低也是 debug,也就是要為這一輸出指定日誌的 level 為 trace。

針對我所用的 hibernate 3.6.0,如果是用 log4j 輸出日誌就在 log4j.properties(log4j.xml 參照此) 中配置:

1

log4j.logger.org.hibernate.type.descriptor.sql.basicbinder=trace

如果用的是 slf4j + logback 的話,就在 logback.xml 中配置:

1

<loggername="org.hibernate.type.descriptor.sql.basicbinder"level="trace"/>

有了這個 trace 配置,在輸出上面 sql 語句後還會顯示出每個引數所繫結的值,如:

第乙個引數繫結的值是 varchar 型別的 "gt",如果有更多的引數依次顯示下去。

如果 hibernate 的版本不是 3.6.0 話,可能配置略有不同,有些文章介紹說把下面兩個包的 trace 開啟,即:

1

2

log4j.logger.org.hibernate.type=trace

log4j.logger.org.hibernate.sql=trace

logback 中的配置請參照上面。這時候你不僅看到了查詢前的繫結值,連查詢出來的每乙個字段值都有了:

還有更冗餘的 hibernate 初始化的資訊,所以你應該在 org.hibernate.type 和 org.hibernate.sql 這兩個包的 trace 基礎上,觀察日誌輸出來緊縮要 trace 的包。

參考:1. 顯示hibernate的sql語句引數值

2. 在控制台中顯示hibernate列印的sql中的引數

利用UNION ALL顯示出合計

利用union all顯示出合計 專案中常常會有合計項,通常是通過計算出某列,然後在此列的最後顯示出合計。慣用的手法是通過union all來無意義連線。例子 達到如下效果 sql sql select from t union all select 合計 sum amt from t 特別需要注意...

JSON陣列遍歷 在到div顯示出內容

html id myid div id myday div var bb var item 遍歷陣列 for迴圈 for var i 0 i item bb i day item myid html item var listday 遍歷陣列for in for var i in bb myday ...

QBC資料查詢 hibernate之查詢語句

敘 之前介紹過hibernate的hql hibernate query language 的查詢資料方式,現在我學習記錄一下關於hibernate的另乙個查詢資料的方式 qbc,qbc資料查詢全稱是 query by criteria資料查詢 下面是我學習的筆記 qbc query by crit...