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

在网上可能很多人问到到底怎么查看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

这不所有东西都输出来了么?





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值