使用Hibernate時如何打印帶有參數值的查詢字符串

在Hibernate中是否能夠用實際值而不是問號打印生成的SQL查詢? sql

若是Hibernate API沒法實現,您將如何建議使用實值打印查詢? apache


#1樓

hibernate.cfg.xml更改成: app

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

在「 log4j.properties」中包括log4j及如下條目: spa

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout

#2樓

您能夠將類別行添加到log4j.xml: hibernate

<category name="org.hibernate.type">
    <priority value="TRACE"/>
</category>

並添加休眠屬性: debug

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

#3樓

打開org.hibernate.type Logger來查看實際參數如何綁定到問號。 代理


#4樓

您須要爲如下類別啓用日誌記錄日誌

  • org.hibernate.SQL設置爲debug以在執行全部SQL DML語句時記錄它們
  • org.hibernate.type設置爲trace以記錄全部JDBC參數

所以,log4j配置以下所示: code

# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug 

# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace

第一個等效於hibernate.show_sql=true legacy 屬性 ,第二個等效於打印綁定參數。 orm

另外一個解決方案(基於非休眠)將使用JDBC代理驅動程序,如P6Spy


#5樓

若是您使用的是休眠3.2.xx,請使用

log4j.logger.org.hibernate.SQL=trace

代替

log4j.logger.org.hibernate.SQL=debug
相關文章
相關標籤/搜索