采用p6spy完整显示hibernate的SQL语句

虽然在hibernate中有show_sql选项,但是显示出来的语句大多类似

select * from xxx where value=?

但是有时候我们需要得到完整的SQL语句,怎么办呢?使用P6SPY就可以完成这个任务

p6spy是一个开源软件,它可以跟踪任何使用jdbc的应用产生的数据库操作。特别适合于监控ejb服务器产生的 sql statements。
官方网址:http://www.p6spy.com/
目前p6spy 适用的应用服务器包括jboss, atg, orion, jonas, iplanet, weblogic, websphere, resin and tomcat.

下面我介绍一下p6spy在tomcat应用程序上安装的步骤:
(1)http://www.p6spy.com/download.html ,下载zip包
(2)解压出p6spy.jar spy.properties两个文件
(3)将p6spy.jar 放入应用程序的WEB-INF/lib目录,将spy.properties放入WEB-INF/classes目录
(4)修改spy.properties

realdriver =com.mysql.jdbc.Driver 将这行前面的#去掉
logfile = c:/spy.log 修改一个你需要的日志文件名

(5)修改hibernate.xml,修改connection.driver_class的值为com.p6spy.engine.spy.P6SpyDriver
(6)重启tomcat
(7)这样在c:/下的spy.log记录了数据库的访问情况。

驱动程序加载先后的问题解决
如果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,重新运行即可。

5.在spring 配置文件中配置如下:

<!-- P6SPY dataSource target -->
<bean id = "dataSourceTarget" class = "org.spring framework.jdbc.datasource.DriverManagerDataSource" >
  <property name = "driverClassName" value = "oracle.jdbc.OracleDriver" />
  <property name = "url" value = "jdbc:oracle:thin:@localhost:1521:testdb" />
  <property name = "username" value = "tet" />
  <property name = "password" value = "test" />
</bean > 

<!-- dataSource -->
<bean id = "dataSource4develop" class = "com.p6spy .engine.spy.P6DataSource" destroy-method = "close" >
  <constructor-arg >
    <ref local = "dataSourceTarget" />
  </constructor-arg >
</bean >

采用p6spy完整显示hibernate的SQL语句

时间: 2024-08-03 17:20:32

采用p6spy完整显示hibernate的SQL语句的相关文章

在hibernate中用sql语句

在hibernate中用sql语句,语句是createSQLquery 查出来的是,一列或者多列的数据,要将其转化为对象,有两种方式, 对于已经被hibernate所管理的实体类,在后面加.addentity 然后用花括号在sql语句中,select之后from之前,每一个{表名.*},就可以查询出对象. 对于数据传输的dto类,用setresulttransformer.然后在select之后 from之前,把列名和dto的属性名一一as起来. 百万级的数据存储,用外键关联会降低效率 可以选择

通过Log4j的DEBUG级别来显示mybatis的sql语句

    为了更加方便调试sql语句,需要显示mybatis的sql语句.     网络上的一般方式都是通过log4j来实现,但是很多都有问题.      经过实验,以下代码能够保持正常:(只显示mybatis的sql语句的debug语句,其他的debug不显示)     log4j.rootLogger = DEBUG,CONSOLE,LogFile,ErrorFile #注意这里需要改成DEBUG # 应用于控制台 log4j.appender.CONSOLE = org.apache.log

打印hibernate的SQL语句的几种办法

摘要 使用hibernate时,我们常常需要查看hibernate实际提交到数据库的SQL及相关参数.这里提供几种方案,供大家在开发中使用. 使用hibernate-configuration 这也许是最简单的一种配置.我们只需要为hibernate配置一个参数,就可以在console中打印出SQL语句. 需要增加的仅仅是这个参数(其它参数略去): <hibernate-configuration>     <session-factory>         <propert

Hibernate 执行sql语句返回yntax error: syntax error, expect LPAREN, actual NOT not

hibernate自动创建表时提示 :  ERROR: sql injection violation, syntax error: syntax error, expect LPAREN, actual NOT not : 可是我把sql语句在sql客户端执行是Ok的 后来在一个博客的评论区找到了原因 原来改sql语句执行被druid配置的防火墙拦截了 将druid.filters属性中的wall去掉就好

关于hibernate执行sql语句后,进程不关闭的问题

写了一个简单的测试程序,就是java查询数据库的,后面发现了数据库查询结束后,进程一直不会结束,在调试的时候,发现生成了一个线程,是这个线程不关闭. /** * */ package com.test.mysql; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hi

Hibernate格式化sql语句实体类 BasicFormatterImpl 源码

package com.util; import java.util.HashSet; import java.util.LinkedList; import java.util.Set; import java.util.StringTokenizer; public class BasicFormatterImpl { private static final Set<String> BEGIN_CLAUSES = new HashSet<String>(); private

格式化Hibernate的SQL输出语句

在 applicationContent.xml 文件中加入以下程序代码,及可以Console中看到 hibernate 执行sql 语句 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="com.mysql.jdbc.Driver&q

Hibernate 的update语句性能详解

Hibernate 中如果直接使用 Session.update(Object o); 会把这个表中的所有字段更新一遍. 比如: view plaincopy to clipboardprint? public class TeacherTest { @Test public void update(){ Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransactio

基于SpringJDBC的类mybatis形式SQL语句管理的思考与实现

SpringJDBC为我们提供了一个非常方便的数据库访问接口,我们都知道使用JdbcTemplate对数据库进行操作时需要传入执行的SQL语句.在小型系统中,SQL语句可能并不会太多,这个时候我们无论采取什么方式进行管理都没有关系.但是当系统逐渐庞大后,我们就要考虑以一种恰当的方式对这些SQL进行管理了.我们将首先介绍比较常见的几种SQL管理方式,然后再讨论类mybatis形式的SQL管理方式. 在方法中直接构造并传入 这种方式是在需要执行数据库操作的方法内直接硬编码SQL语句.这样做的好处在于