使用Hibernate提供的内置属性<Property name="show_sql">true</Property>只能输出类似于下面的SQL
Hibernate: insert into aticle (content, aticle_id) values (?, ?)
这样不利于程序的调试,为了可以显示?占位符所代表的具体数据,需要第三方Jar包,p6spy是一个该需求的开源实现。
一、在Java Project项目中使用p6spy:
- 到http://sourceforge.net/projects/p6spy/下载其Jar包。
- 将其解压缩,将里面的p6spy.jar放入构建路径里,将spy.properties文件放入src目录下。
- 修改两个属性,第一个,realdriver=你使用具体数据库的驱动类(例如Oralce为:realdriver=oracle.jdbc.driver.OracleDriver);第二个,logfile=指定log文件的位置(例如logfile= E:/tmp/spy.log)。
- 修改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环境下)
- 将p6spy.jar 放入应用程序的WEB-INF/lib目录,将spy.properties放入WEB-INF/classes目录
- 其他与Java Project项目使用方法一样。
- 重启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.show_sql 参数用于输出所有 SQL 语句到控制台。其取值为 true 或 false。当设置为 true 时,Hibernate 将输出所有 SQL 语句到控制台,方便开发者调试和优化数据库操作。 3. hibernate.format_sql ...
这些配置会捕获Hibernate执行的SQL语句及其参数绑定,从而在控制台看到完整的、参数化的SQL。 在开发环境中,这样的配置非常有用,因为它能帮助我们理解查询行为,定位潜在的性能瓶颈,或者检查数据是否按照预期...
本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...
在Java的持久化框架Hibernate中,SQLQuery是用于执行自定义SQL语句的重要工具,它允许开发者绕过ORM(对象关系映射)的抽象层,直接与数据库进行交互。这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用...
MyBatis是一个轻量级的持久层框架,它允许开发者编写原生的SQL语句并将其与Java代码绑定。这样的设计提供了更多的灵活性,尤其是在处理复杂查询或性能调优时。开发者可能为了项目需求,或是对现有MyBatis的扩展或...
显示 SQL 语句 (Show SQL) - **名称**:`hibernate.show_sql` - **描述**:启用该配置后,Hibernate 将在控制台上输出执行的所有 SQL 语句,方便进行调试。 - **取值**:`true` 或 `false`。 - **示例**:`...
这将使Ibatis2在DEBUG级别打印出所有执行的SQL语句和绑定参数,帮助开发者了解程序运行状态。 关于`ibatis2.jar`,它是Ibatis2框架的主要依赖库,包含了所有必要的类和接口,用于实现数据访问层的功能。使用这个JAR...
1. **hibernate.dialect**: 这个参数用于指定与特定数据库兼容的方言(Dialect),使得Hibernate能够生成针对该数据库优化的SQL语句。例如,如果你使用的是MySQL,可以设置为`org.hibernate.dialect.MySQL5Dialect`...
例如,Oracle提供了一种名为"SQL Trace"的功能,它可以记录SQL语句的执行细节,包括绑定变量的值。此外,还可以使用第三方工具如Toad、PL/SQL Developer或SQL Developer,它们提供了更友好的界面来查看和分析SQL执行...
- **PreparedStatement**:为了提高性能和防止SQL注入,通常推荐使用`PreparedStatement`,它可以预编译SQL语句,且支持参数绑定。 - **JDBC批处理**:对于批量操作,JDBC提供批处理功能,通过`addBatch()`和`...
2. **hibernate.show_sql**:如果设置为`true`,Hibernate将在控制台上打印出执行的所有SQL语句,这对于调试非常有用。 3. **hibernate.format_sql**:当设置为`true`时,Hibernate会格式化输出的SQL,使其更易读。...
另一方面,Hibernate 的 "show_sql" 属性也是用来打印 SQL 语句的,但它通常只显示带有参数占位符(如 "?")的 SQL,而不是实际替换后的 SQL。这对于理解 SQL 执行逻辑可能会造成一些困扰,特别是当你需要查看具体...
在Hibernate中,可以通过`createSQLQuery()`方法来执行NSQL语句。这种方式适用于那些无法通过HQL表达的复杂查询或者需要与特定数据库特性紧密结合的情况。 **示例代码**: ```java // 插入一条记录 String sql = ...
使用预编译语句时,SQL语句的结构是固定的,只有参数是可以改变的。例如,在Java中,可以这样使用PreparedStatement: ```java String sql = "SELECT * FROM Users WHERE username = ?"; PreparedStatement ...
- `hibernate.show_sql`:如果设为`true`,Hibernate会在控制台输出所有执行的SQL语句。 - `hibernate.format_sql`:如果设为`true`,输出格式化的SQL,使日志和控制台的输出更易读。 - `hibernate.default_...
通过Hibernate,开发者可以将Java对象直接映射到数据库表,从而避免了编写大量的SQL语句。Hibernate 支持多种数据库,包括题目中的 Microsoft SQL Server 2012。在Hibernate中,数据库操作通常通过Session接口完成,...
在执行时,这些值会被安全地绑定到SQL语句中,避免了直接拼接字符串可能导致的注入风险。 例如,使用Java的JDBC,你可以创建一个PreparedStatement对象,如下所示: ```java String sql = "SELECT * FROM Users ...
最后,生成一个参数占位符的值列表,用于后续绑定实际值。 在实际应用中,我们可以进一步完善这个工具类,例如,处理嵌套的Bean对象,支持自定义的注解策略,或者添加对更新和删除操作的支持。同时,为了安全起见,...
Hibernate 支持 native SQL 操作,可以使用原生 SQL 语句来查询对象。 性能 Hibernate 的性能可以通过一级缓存和二级缓存来提高。一级缓存可以缓存对象的状态,二级缓存可以缓存查询结果。 Hibernate 也支持第三方...
5. **hibernate.show_sql**:如果设置为`true`,Hibernate将打印出执行的每个SQL语句,方便调试。 6. **hibernate.format_sql**:当设置为`true`时,Hibernate会格式化输出的SQL,使其更易读。 7. **hibernate.hbm...