项目配置p6spy打印ibatis的完整sql

项目使用ibatis,开启了打印sql功能,可是打印到控制台的sql中带有? , 例如:
select o.id,o.orgName,o.hrCode,o.hrpCode,o.displayName  from T_UAM_STAFF s  where s.hrStatus<? and s.userId=? and s.locked=? 
想要在数据库中执行该sql,需要知道sql的参数值,并手工改sql的? 为实际值,有时还要使用 '  ' 包裹字符串类的数据,在插入数据时有时需要写很多值.十分不方便.
可以使用p6spy开源框架来打印sql,效果如下:
select o.id,o.orgName,o.hrCode,o.hrpCode,o.displayName    from T_UAM_STAFF s  where s.hrStatus<3 and s.userId=208736283 and s.locked=0  
配置如下:
1、将p6spy.jar放到lib下,引入工程。
2、将spy.properties放到src下,最后部署到类路径下。

在官网下载的文件中添加如下内容:

logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat

appender=com.p6spy.engine.spy.appender.StdoutLogger
databaseDialectDateFormat=yy-MMM-dd hh:mm:ss,SSS


3 、修改spring-default.xml文件,
<!--添加 配置p6spy -->
    <bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource">
        <constructor-arg>
            <ref local="talkwebDataSource"/>
        </constructor-arg>
    </bean>
修改配置:
<bean class="com.talkweb.ecm.business.util.datasource.DynamicDataSource"
        id="dataSource">

<bean class="com.talkweb.ecm.business.util.datasource.DynamicDataSource"
        id="talkwebDataSource">


4.公司配置ibatis的日志级别为debug才打印了sql,如果觉得日志太多影响调试可以修改下配置级别(可选)
修改log4j.properties中log4j.logger.com.ibatis配置节中debug为info即可.


注:使用p6spy不仅可打印ibatis中的sql,在和hibernate集成时也可打印sql.


参考文章:http://copperfield.iteye.com/blog/1144369
http://blog.csdn.net/blackwingzhong/article/details/3858356
深入研究及扩展:
http://www.ibm.com/developerworks/cn/java/j-lo-p6spy/


遇到的问题及解决办法:
1.下载jar时打不开官网,估计是被墙掉了.
在maven上找了一下找到了最新的的p6spy-2.1.4.jar ,下载那个zip包,里面有jar包,spy.properties文件和源代码.
2.按照大多数配置的方法进行配置启动报错,主要参考:http://copperfield.iteye.com/blog/1144369
1、添加p6spy.jar。
2、将spy.properties放到src下,最后部署到类路径下。
3、修改database.properties中的数据库驱动,如:database.connection.driver=com.p6spy.engine.spy.P6SpyDriver
4、修改spy.properties中的属性:
   realdriver=oracle.jdbc.driver.OracleDriver
5、修改sql日志的输出方式,第三个是输出到控制台,第四个是输出到文件。
appender=com.p6spy.engine.logging.appender.StdoutLogger
仔细看spy.properties文件,没有发现realdriver的配置,而发现了#realdatasource和#realdatasourceclass,怀疑是网上查出的资料太老,版本是1.xx的,而我下载的jar是最新的2.14.jar的,所以配置有所改变,使用realdatasource 和realdatasourceclass替换了realdriver仍报错.
3.项目是用c3p0连接池,怀疑是连接池造成的.搜索后发现这篇文章http://blog.csdn.net/blackwingzhong/article/details/3858356
阅读公司的配置数据库文件后发现发现公司的配置中为了支持动态链接增加了自己的数据源配置.

修改配置,在c3p0和公司配置之间加入了p6spy的配置,启动正常.输出sql替换了问号

4.默认打印格式为: current time|execution time|category|statement SQL string|effective SQL string
原始sql和真正被执行的sql显示在一行了,默认的配置为:logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
我的解决方式是,在配置文件中增加配置项:logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
这样就能把真正执行的sql换行显示.
网上还有一种办法,自己定义一个类继承原有类,并修改打印方式,有兴趣的可以看这里:
http://wenku.baidu.com/link?url=bOCRT1z50Ew_l_cfV9jltCc88MDt3a8UO5ZZuXGEYtPrTvDsYKMXZ7-nFXmp4MTB8IcndpgXjgZhZAdu2ETjhNwHzoxjTH6tLn1Byd7WQHu


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值