您的位置:首页 > 数据库

到底怎么查看Hibernate生成SQL中的参数值?

2013-08-28 10:46 274 查看
在网上可能很多人问到到底怎么查看hibernate生成的SQL参数值,可以看到非常多的方法,最多的就是说下载一个P6SPY来查看,其实只要自己看看hibernate的源代码,就可以发现,hibernate所有的参数值的设置都是交由org.hibernate.type.descriptor.ValueBinder接口上的bind方法进行绑定。而在ValueBinder的子类BasicBinder的bind方法上面有一段代码:

 if ( LOG.isTraceEnabled() ) {
    LOG.trace(
         String.format(
              BIND_MSG_TEMPLATE,
              index,
              JdbcTypeNameMapper.getTypeName( sqlDescriptor.getSqlType() ),
              getJavaDescriptor().extractLoggableRepresentation( value )
         )
    );
}


这段代码的含义我想所有人都能看得懂吧,如果开启了trace级别的日志,那么就把参数的类型和值输出,所以,最简单,最正确的做法是,在log4j中开启对org.hibernate.type的TRACE(而不是网上很多人说的DEBUG)日志输出级别就可以啦:

 <logger name="org.hibernate.type.descriptor.sql">
  	<level value="TRACE"></level>
  	<appender-ref ref="console"/>
 </logger>


控制台输出:

  721 [main] DEBUG org.hibernate.SQL  - insert into Department (name) values (?)
  731 [main] TRACE org.hibernate.type.descriptor.sql.BasicBinder  - binding parameter [1] as [VARCHAR] - d1
  741 [main] DEBUG org.hibernate.SQL  - insert into Department (name) values (?)
  741 [main] TRACE org.hibernate.type.descriptor.sql.BasicBinder  - binding parameter [1] as [VARCHAR] - d2
  751 [main] DEBUG org.hibernate.SQL  - insert into Department (name) values (?)
  751 [main] TRACE org.hibernate.type.descriptor.sql.BasicBinder  - binding parameter [1] as [VARCHAR] - d3
  
  751 [main] DEBUG org.hibernate.SQL  - insert into Employee (DEPT_ID) values (?)
  761 [main] TRACE org.hibernate.type.descriptor.sql.BasicBinder  - binding parameter [1] as [BIGINT] - 2
  843 [main] DEBUG org.hibernate.SQL  - select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id=?
853 [main] TRACE org.hibernate.type.descriptor.sql.BasicBinder  - binding parameter [1] as [BIGINT] - 1


这不所有东西都输出来了么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate java
相关文章推荐