`
guzizai2007
  • 浏览: 354355 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

让Hibernate显示SQL语句的绑定参数值

 
阅读更多

使用Hibernate提供的内置属性<Property name="show_sql">true</Property>只能输出类似于下面的SQL

Hibernate: insert into aticle (content, aticle_id) values (?, ?)

这样不利于程序的调试,为了可以显示?占位符所代表的具体数据,需要第三方Jar包,p6spy是一个该需求的开源实现。

一、在Java Project项目中使用p6spy:

  1. http://sourceforge.net/projects/p6spy/下载其Jar包。
  2. 将其解压缩,将里面的p6spy.jar放入构建路径里,将spy.properties文件放入src目录下。
  3. 修改两个属性,第一个,realdriver=你使用具体数据库的驱动类(例如Oralce为:realdriver=oracle.jdbc.driver.OracleDriver);第二个,logfile=指定log文件的位置(例如logfile= E:/tmp/spy.log)。
  4. 修改Hibernate.cfg.xml配置文件中的 <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>

配置完毕后,执行HQL语句后,查看spy.log文件就可以看到?占位符的具体数据了:(前面部分是Hibernate的初始化信息,最下面显示的就是完整的SQL语句)

1363760581228|1|0|commit||
1363760581471|135|0|statement||select sequence_name from user_sequences
1363760581490|-1||resultset|select sequence_name from user_sequences|SEQUENCE_NAME = HIBERNATE_SEQUENCE
1363760588977|3|0|statement|select hibernate_sequence.nextval from dual|select hibernate_sequence.nextval from dual
1363760589081|75|0|statement|insert into aticle (content, aticle_id) values (?, ?)|insert into aticle (content, aticle_id) values ('内容', 55241)
1363760589083|1|0|commit||

二、在Java Web项目中使用p6spy(Tomcat环境下)

  1. 将p6spy.jar 放入应用程序的WEB-INF/lib目录,将spy.properties放入WEB-INF/classes目录
  2. 其他与Java Project项目使用方法一样。
  3. 重启Tomcat服务器

可能会出现的问题:驱动程序加载先后的问题解决

如果spy.log里出现你的程序的数据库驱动名称 is a real driver in spy.properties, but it has been loaded before p6spy. p6spy will not wrap these connections. Either prevent the driver from loading, or try setting 'deregisterdrivers' to true in spy.properties.

请把spy.properties文件里的deregisterdrivers=false改为deregisterdrivers=true,重新运行即可。

 

转自:http://www.cnblogs.com/otomedaybreak/archive/2012/01/17/show_full_sql_by_p6spy_in_hibernate.html

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate实战(第2版 中文高清版)

     1.3 持久层和其他层 显示全部信息第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象...

    Hibernate教程

    绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable iteration) 11.4.1.7. 外置命名查询(Externalizing named queries) 11.4.2. 过滤集合 11.4.3. 条件查询(Criteria queries) 11.4.4. 使用原生SQL的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 ...

    最全Hibernate 参考文档

    绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) 10.4.1.7. 外置命名查询(Externalizing named queries) 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 ...

    Hibernate注释大全收藏

    Hibernate 使用 SQL Union 查询来实现这种策略。 这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     17.1.12 在HQL查询语句中绑定参数  17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 ...

    hibernate3.04中文文档.chm

    绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable iteration) 11.4.1.7. 外置命名查询(Externalizing named queries) 11.4.2. 过滤集合 11.4.3. 条件查询(Criteria queries) 11.4.4. 使用原生SQL的...

    Hibernate3+中文参考文档

    绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) 10.4.1.7. 外置命名查询(Externalizing named queries) 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 ...

    hibernate 框架详解

    绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable iteration) 11.4.1.7. 外置命名查询(Externalizing named queries) 11.4.2. 过滤集合 11.4.3. 条件查询(Criteria queries) 11.4.4. 使用原生SQL的...

    Java数据库快速开发框架(数据库快速开发框架)。- fast-sql / FastSQL

    FastSQL可以完全满足你控制欲,可以用Java代码清晰又方便地写出sql语句并执行。FastSQL完全可用于生产环境,相比Mybatis,使用简单,开发效率高。2 入门2.1 安装如果使用 Maven 来构建项目,则需将下面的 dependency ...

    Spring + Spring MVC +Mybatis.zip

    而Mybatis框架作为持久层的框架,虽然需要自己编写SQL语句,但是其对高并发高响应的支持,以及对动态SQL和动态绑定的支持使其脱颖而出。 因此SSM框架(Spring + Spring MVC +Mybatis)逐渐取代了之前广泛使用的...

    Hibernate-SpringBoot:收集Spring Boot应用程序中的Java持久性性能的最佳实践

    最佳性能实践Hibernate 5/6和Spring Boot 2 如果您需要深入了解该存储库中提供的性能配方,那么我相信您会喜欢我的书“ ...说明:通过Log4J 2记录器设置查看准备好的语句绑定/提取的参数。 关键点: 对于Maven,在po

    支持多数据库的ORM框架ef-orm.zip

    但是这些SQL语句并不是直接传送给JDBC驱动的,而是 有着一个数据库方言层,经过方言层处理的SQL语句,就具备了在当前数据库上正确操作的能力。这相当于提供了一种能跨数据库操作的SQL语言。(E-SQL) E-SQL不但解决了...

    java面试题

    答:事务就是被绑定在一起,作为一个逻辑单元执行的SQL语句。如果任何一个操作失败,那么整个就失败。共同失败或共同成功。锁可以保证事务的完整性和并发性。 什么是视图?游标是什么? 答:视图是一种虚拟的表,...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    QueryBudiler,使得更多简单的单表查询可以通过对象组织查询、更改逻辑,避免过多去写相似性的SQL语句,减少DAO接口量。 三、一些亮点 1、Entity的设计:很多人看了也许会说,这个不是POJO,不是纯粹的Java ...

    1000道 互联网Java架构师面试题.pdf和JAVA核心知识整理.zip

    5、MyBatis 与 Hibernate 有哪些不同? 6、#{}和${}的区别是什么? 7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 8、 模糊查询 like 语句该怎么写? 9、通常一个 Xml 映射文件,都会写一个 Dao 接口与...

    容灾项目从入门到实战视频.rar

    │ 03-页面链接的处理-数据库0值外键的处理 网盘文件永久连接 │ 04-解决序号不正确的问题-1.mp4 │ 05-列表项的显示-1.mp4 │ 06-删除代码的封装-1.mp4 │ 07-封装通用的表格选项-1.mp4 │ 08-功能预览-1.mp4 │ 09...

Global site tag (gtag.js) - Google Analytics