设为首页 收藏本站
查看: 764|回复: 0

[经验分享] 打印hibernate的SQL语句的几种办法

[复制链接]

尚未签到

发表于 2018-10-20 13:44:56 | 显示全部楼层 |阅读模式
摘要
  使用hibernate时,我们常常需要查看hibernate实际提交到数据库的SQL及相关参数。这里提供几种方案,供大家在开发中使用。
使用hibernate-configuration
  这也许是最简单的一种配置。我们只需要为hibernate配置一个参数,就可以在console中打印出SQL语句。
  需要增加的仅仅是这个参数(其它参数略去):
  
     
          true
     
  
  与打印SQL语句相关的配置,还有两个:format_sql和use_sql_comments。顾名思义,他们配置的是打印SQL时是否进行格式化、以及是否打印出相关的注释。
  但是,hibernate自己的配置中,似乎不能将参数绑定到SQL上,SQL语句中只有问号占位符。
使用log4j
  如果使用log4j,我们需要做的就是为hibernate相应的类配置logger和appender。appender的配置略去(开发中一般就配置为console),logger配置如下:
  # log4j.properties文件的配置
  log4j.logger.org.hibernate.SQL=DEBUG
  log4j.logger.org.hibernate.type=TRACE
  # log4j.xml文件的配置
  
  
  上面的配置中,org.hibernate.SQL的日志配置的效果与show_sql=true的配置果相似,都会把SQL语句打印出来。而org.hibernate.type的日志配置,则会把SQL中占位符对应的参数打印出来。两者结合起来,日志结果如下:
Hibernate: INSERT INTO mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)VALUES (?, ?, ?, ?, ?, ?)13:33:07,253 DEBUG FloatType:133 - binding '10.0' to parameter: 1  
13:33:07,253 DEBUG FloatType:133 - binding '1.1' to parameter: 2
  
13:33:07,253 DEBUG DateType:133 - binding '30 December 2009' to parameter: 3
  
13:33:07,269 DEBUG FloatType:133 - binding '1.2' to parameter: 4
  
13:33:07,269 DEBUG IntegerType:133 - binding '11' to parameter: 5
  
13:33:07,269 DEBUG LongType:133 - binding '1000000' to parameter: 6
  但是,尽管这种方式能够把SQL和参数都打印出来,但是二者却是分开打印的。如果一段时间内执行的SQL非常多,那么这部分日志会比较的杂乱,对于开发来说帮助并不大。
使用p6spy
  P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器。使用P6spy,我们需要的配置比较复杂,清单如下。
  绝对不要把这些配置提交到上线代码中!
  首先,我们需要引入相关jar包。
  pom.xml
  
  
      p6spy
      p6spy
      3.0.0
  
  第二,我们需要“处理”一下数据源配置。
  spring-db.xml
  
     
          
              
              
              
              
          
     
  
  最后,我们需要为p6spy增加一个配置文件,放到resource路径下。其中可配置项很多,我们可以只配置一部分(例如示例中的三项)。完整配置可以查看他们的官网。
  p6spy.properties
  # 默认会在项目路径下创建spy.log
  logfile = C:/Users/Administrator/Desktop/log/spy.log
  # 默认apptend=true,会导致日志文件不断扩大
  append=false
  # 默认是dd-MMM-yy
  databaseDialectDateFormat=yyyy-MM-dd
  配置好之后,spy.log中应该会有这样的输出。红色字体部分就是带有参数的SQL语句。

  1485070310889|0|statement|connection 10|select companyacc0_.id as>参考
  使用hibernate的show_sql方式配置:http://www.mkyong.com/hibernate/hibernate-display-generated-sql-to-console-show_sql-format_sql-and-use_sql_comments/
  使用Log4j配置:http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-log4j/
  使用P6spy配置:http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/
  P6spy官方配置说明:http://p6spy.readthedocs.io/en/latest/configandusage.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624130-1-1.html 上篇帖子: oracel在sql中的循环 下篇帖子: SQL基础整理——例题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表