Hibernate显示真正的SQL

Tom*_*ffi 384 java sql orm hibernate

如果我订

<property name="show_sql">true</property>
Run Code Online (Sandbox Code Playgroud)

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

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

例:

我知道了

select this_.code from true.employee this_ where this_.code=?
Run Code Online (Sandbox Code Playgroud)

我可以看吗

select employee.code from employee where employee.code=12
Run Code Online (Sandbox Code Playgroud)

真正的 SQL?

Pas*_*ent 361

我可以看到(...)真正的SQL

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

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

log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
Run Code Online (Sandbox Code Playgroud)

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

参考

  • 我喜欢P6Spy,特别是在运行单元测试时,因为除了bind参数值之外,它还会为您提供查询的结果集. (10认同)

Tom*_*ffi 236

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
Run Code Online (Sandbox Code Playgroud)

的hibernate.cfg.xml

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
Run Code Online (Sandbox Code Playgroud)

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"/>
Run Code Online (Sandbox Code Playgroud)

  • @Rachel,除了记录诸如`TRACE [BasicBinder]绑定参数[1]为[VARCHAR] - john doe`之外你还需要什么? (3认同)
  • 不要在hibernate 4.3上工作!! (3认同)
  • @Arjan 单独列出参数确实没有多大帮助。我想要这样的 sql 打印的部分原因是我可以自己运行这些语句并查看发生了什么。必须手动插入参数是很笨拙的。遗憾的是没有更简化的方法来打印这些内容。 (2认同)

Bri*_*man 15

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

<property name="show_sql">true</property>
Run Code Online (Sandbox Code Playgroud)

要同时打印绑定参数,请将以下内容添加到log4j.properties文件中:

log4j.logger.net.sf.hibernate.type=debug
Run Code Online (Sandbox Code Playgroud)


gub*_*bby 11

值得注意的是,您看到的代码按原样发送到数据库,查询将单独发送以防止SQL注入.AFAIK?标记是占位符,由数据库的数字参数替换,而不是由休眠.