Hibernate显示真正的SQL

如果我设置

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

在控制台的hibernate.cfg.xml配置文件中,我可以看到SQL。

但它不是真正的 SQL…我能看到SQL代码,将直接传递到数据库吗?

例子:

我看到

select this_.code from true.employee this_ where this_.code=?

我能看看吗

select employee.code from employee where employee.code=12

真正的 SQL?

601526 次浏览

我能看到(…)真正的SQL吗

如果你想看到SQL直接发送到数据库(在你的例子中是格式化为类似的),你将不得不使用某种jdbc驱动程序代理,比如P6Spy(或log4jdbc)。

或者,你也可以启用以下类别的日志记录(此处使用log4j.properties文件):

log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE

第一个方法相当于hibernate.show_sql=true,第二个方法打印绑定参数。

参考

select this_.code from true.employee this_ where this_.code=? 将发送到数据库的内容。

this_employee表实例的别名。

如果你已经可以看到正在打印的SQL,这意味着你的hibernate.cfg.xml中有下面的代码:

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

要打印绑定参数,请将以下内容添加到log4j中。属性文件:

log4j.logger.net.sf.hibernate.type=debug

log4j . properties

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug


log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

hibernate.cfg.xml

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

persistence . xml

一些框架使用persistence.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>

值得注意的是,您看到的代码是按原样发送到数据库的,查询是单独发送的,以防止SQL注入。阿菲克?标记是占位符,由数据库(而不是hibernate)的数字参数替换。