Hibernate 显示完整SQL语句

使用hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。
p6spy: http://www.p6spy.com
SQL Profile:http://sourceforge.net/projects/sqlprofiler/

一、下载p6spy-install.zip

    官方:http://www.p6spy.com/

    解压:p6spy-install.zip,

    把根目录下的p7spy.jar 复制到 WEB-INF\lib\下,

    spy.properties 复制到 WEB-INF\classes\下

二、修改spy.properties文件

    开启42行

    # oracle driver
    realdriver=oracle.jdbc.driver.OracleDriver

    关闭54行     
    # the mysql open source driver
    #realdriver=org.gjt.mm.mysql.Driver

    修改168行,日志存放位置

    logfile = c:/spy.log

三、修改spring配置文件


 
  classpath:connectionPool.properties  
 

 

   
 
  ${proxool.alias}
 

 
  ${proxool.driver}
 

 
  ${proxool.url}
 

 
  ${proxool.username}
 

 
  ${proxool.password}
 

 
  ${proxool.minimumConnectionCount}
 

 
  ${proxool.maximumConnectionCount}
 

 
  ${proxool.prototypeCount}
 

 
  ${proxool.simultaneousBuildThrottle}
 

 
  ${proxool.maximumActiveTime}
 

 
 
  ${proxool.houseKeepingSleepTime}
 

 
  ${proxool.maximumConnectionLifetime}
 

 
  ${proxool.trace}
 

 
  ${proxool.verbose}
 
 
 
  ${proxool.statistics}
 

 
  ${proxool.statisticsLogLevel}
 

 
  ${proxool.testAfterUse}
 

 
  ${proxool.testAfterUse}
 

 
  ${proxool.houseKeepingTestSql}
 
 
 

 
 
 
 
 

 

 
 
 
 
   
 

 重启应用后,打开spy.log看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。


解压sqlprofiler-0.3-bin.zip,把spy.properties拷贝到项目中,覆盖之前的spy.properties,要改的也只是realdriver,可以看到配置文件中有log4j,这就需要我们吧log4j的jar拷贝到应用中。

sqlprofiler.jar并不需要拷贝到应用中,他需要我们来执行:
java -Xmx256m -jar sqlprofiler.jar



spy.properties片断:
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true

p6spy 通过SocketAppender 向sqlprofiler发送日志信息,sqlprofiler启动后就开始监听本机的4445端口,在应用中执行数据库操作后就可以在sqlprofiler的界面中看到sql语句的执行结果。

最后一个需要注意的问题就是需要先启动 SQLProfiler,此时状态栏显示P6SPY为未连接状态,然后再启动应用程序或者 Tomcat 等应用服务器,应用运行后SQLProfiler状态栏就会变为连接状态。这是因为 SQLProfiler 默认使用的是 Log4j 的 SocketAppender,所以要先启动。否则,会因你的应用程序或应用服务器中的 Web 应用之类的因连接不到 Socket 的服务器(SQLProfiler 相当于 Socket 的服务器)而发生错误,可以通过 SQL Profiler 控制界面最下面的连接状态就可以知道是否有程序连接上来。

你可能感兴趣的:(Java)