读书人

ibatis在debug时打印完整的SQL话语

发布时间: 2012-08-24 10:00:20 作者: rapoo

ibatis在debug时打印完整的SQL语句

转载于:http://www.cnblogs.com/warison2008/archive/2010/10/13/1850262.html

?

这些年做的项目中,对持久层的选型更多的是基于ibatis,而且自己涂鸦的系统开发框架数据层操作也是居于ibatis实现的,不为别的,就因为ibatis使用的是纯jdbc操作。

?? ? ?时下流行凡是都“原始回归”,“如果能把ibatis进行更好地理解和扩展,也不乏为一个优秀的杜撰框架”,基于这样的想法,好长时间里,我一直是钟情于ibatis的源码学习,自然从中也学到了很多有用的东西,设计模式、算法分析、构建思想和一些优秀的API实体类工具等。

?? ? ??好,先来几句赞美ibatis的浮夸。

?? ? ?ibatis?是一个?O/R Mapping?解决方案,?ibatis?最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,?ibatis?是能满足你的要求又足够灵活的最简单的解决方案。ibatis?以SQL开发的工作量和数据库移植性上的让步,为系统?设计提供了更大的自由空间。

?? ? ?ibatis?底层采用纯JDBC操作,要求操作人员直接编写sql进行操作,光从这点看,ibatis本身就大大地提高数据层操作的透明度。

ibatis在debug时打印完整的SQL话语

?? ? ?好啦,改干正事了,这里我主要解决的就是一个常见的问题,即使用ibatis时需要在控制台或日志文件中打印其当前执行的完整sql,而不是常见的参数?问号???语句。(这里主要基于ibatis2.0以上版本)。

?

步骤:

?? ? ?1.网上下一个源码文件(没有可找我,我发一份给你)

?? ? ?2.?最终API执行流程,这里以insert为例。?具体顺序如下图:

ibatis在debug时打印完整的SQL话语

?? ? ?3.?最终根源找到,即修改com.ibatis.sqlmap.engine.execution.SqlExecutor即可。

在代码66行处有如下方法

public int executeUpdate(StatementScope statementScope, Connection conn, String sql, Object[] parameters) throws SQLException {

}

insert最终执行的就是这个方法,恩,就是它了,改吧

?? ? ?4.?在类体中引入日志打印工具

private static final Log log = LogFactory.getLog(SqlExecutor.class);

?

?? ??5.?添加debug下执行sql打印信息

在ps.execute();?执行前添加如下:

?

大哥 你怎么弄的呀 。。。 2 楼 雁栖湖 2012-05-06 还能是怎么弄的啊,当然是ctrl + c and ctrl + v, 我刚在博客园看完,又看到这个 蛋疼

读书人网 >SQL Server

热点推荐