弄hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。
p6spy: http://sourceforge.net/projects/p6spy/
SQL Profile: http://sourceforge.net/projects/sqlprofiler/
p6spy安装:
* 将p6spy.jar放到WEB-INF/lib目录下,将spy.properties放到WEB-INF/classes目录下。
* 修改你 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver
* 修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver
* 完成,运行web server。
我的日志记录产生在 %TOMCAT_HOME%\logs下,此log位置可以通过修改 logfile = x:\**\*spy.log 来控制
打开看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。
SQL Profiler安装:(须p6spy成功安装)
* 将SQL Profiler自带的spy.properties覆盖原来的classes目录下文件
* 修改现在spy.properties中realdriver 值为 原有 的JDBC Driver
看后看看readme注意这几句 ^__^ :
1. Start the GUI
2. Start the webapp, in starts doing some JDBC requests we will ignore
3. Press the "reset" button on the GUI
4. Make a request to the webapp
5. Press the "pause" button after the request has finished executing
6. Press the "report" button to save profiling results as a CSV file
* 我们先用java -jar sqlprofiler.jar 运行 sql profiler
* 然后启动web server :-)
一切尽在眼前了吧?
当然,p6spy 和 sql profiler 能做的不止这些,sql profiler还能根据你的query来帮你生成建立合适的index功能等等。
详细配置 spy.properties 说明
- #### 当'SQLPROFILER_CLIENT'启用时:
- #### 1.必须为Log4jLogger
- #### 2.必须先运行对应RemoteHost上的sqlprofiler.jar,否则会报socket异常
-
- #specifies the appender to use for logging
- appender=com.p6spy.engine.logging.appender.Log4jLogger
- #appender=com.p6spy.engine.logging.appender.StdoutLogger
- #appender=com.p6spy.engine.logging.appender.FileLogger
-
- #...
- #...
-
- #### p6spy 输出到 sqlprofiler 终端日志配置
- log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
- # sqlprofiler 终端所在IP
- log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
- # sqlprofiler 终端所使用端口号
- log4j.appender.SQLPROFILER_CLIENT.Port=4445
- log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true
-
- log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT