首页 > java > Hibernate打印SQL及附加参数

Hibernate打印SQL及附加参数

2013年6月19日 亲亲宝宝 发表评论 阅读评论

使用Hibernate的项目,发生sql语句错误时,如果因为参数的关系发生异常,怎么才能方便看到参数的值呢?

Hibernate的配置文件hibernate.cfg.xml中有3个设置项跟显示SQL语句相关,他们的值都是boolean值:
(1)show_sql:是否显示SQL语句
(2)format_sql: 是否格式化输出字符串,增强SQL的可读性
(3)use_sql_comments:是否显示注释,用于指示出是什么操作产生了这个SQL语句。

在默认情况下,Hibernate会把SQL语句打印在Console上,因此在开启了上面的设置之后,可以在控制台上看到如下结构的SQL语句:
s0_.post_id=?
可以发现,在控制台上根本看不到,SQL语句对应的参数,一般情况下,Hibernate都会和Log4j配合使用,这样就可以更加灵活的控制 hibernate的日志文件输出。在hibernate中,默认的关于SQL语句对应参数的输出级别为TRACE,比默认的Log4j的日志等级 DEBUG还要低一等级,因此,为了显示参数,还需手动设置一下log4j的配置,把hibernate下的输出等级改为TRACE:
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j. loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE

s0_.post_id=?
TRACE org.hibernate.type.descriptor.sql.BasicBinder – binding parameter [1] as [INTEGER]- 10
如果还想查看查询中命名参数的值,还需要在log4j的配置文件中加上如下的值:
log4j.logger.org.hibernate.engine.QueryParameters=DEBUG
log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG
这样修改之后,可以得到如下的结果:
org.hibernate.engine.QueryParameters – named parameters: {email=fantasia@sina.com}
org.hibernate.SQL – user0_.email=?

分类: java 标签: 3,575 次阅读
原文链接:http://www.wenhq.com/article/view_774.html
欢迎转载,请注明出处:亲亲宝宝
  1. 2013年6月20日17:00 | #1

    博客不错,给力支持

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.