使用Hibernate时如何打印带有参数值的查询字符串

情到浓时终转凉″ 提交于 2020-02-26 09:10:24

在Hibernate中是否可以用实际值而不是问号打印生成的SQL查询?

如果Hibernate API无法实现,您将如何建议使用实值打印查询?


#1楼

hibernate.cfg.xml更改为:

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

在“ log4j.properties”中包括log4j及以下条目:

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:

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

并添加休眠属性:

<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配置如下所示:

# 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 属性 ,第二个等效于打印绑定参数。

另一个解决方案(基于非休眠)将使用JDBC代理驱动程序,如P6Spy


#5楼

如果您使用的是休眠3.2.xx,请使用

log4j.logger.org.hibernate.SQL=trace

代替

log4j.logger.org.hibernate.SQL=debug 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!