MyBatis作为一个流行的半自动ORM框架,里面融合了许多优秀的设计理念,分析其源码骨架能够帮你建立良好的项目设计经验。由于其比较复杂,我会分成几篇来讲,一起踏上征服的旅程吧!
首先把MyBatis源码包导入到idea,再新建一个项目依赖本地包,这样我们就可以进行调试调用了。
因为MyBatis不同于Tomcat,它依赖于外部调用才能启动.
MyBatis的基础支撑层基于iBatis,它在iBatis的基础上增加了外观模式,方便编码人员更直观的使用。
因此,我们看一下它的核心包:
优秀的地方在于,每个模块之间的耦合度较低,一个包就是一个单独的模块。所以我们在分析单个模块的时候,相关类都会在同一个包中,是不是很方便。
日志模块
MyBatis没有提供日志的实现类,仅仅提供了一个Log接口,规定了trace、debug、warn、error四个级别:
public interface Log {
boolean isDebugEnabled();
boolean isTraceEnabled();
void error(String s, Throwable e);
void error(String s);
void debug(String s);
void trace(String s);
void warn(String s);
}
此处我们以log4j来看,MyBatis是怎么集成日志插件的:
我们打开这个Log4jImpl,看看它是怎么把日志插件集成进来的:
首先,它实现了Log接口,然后将Log的相关处理转交给Logger对象(log4j中实际的打印类)来处理,典型的适配器模式。其他的日志插件也是如此,可以看一下Log模块的类图:
这是一个工厂模式,通过它的工厂代码我们就可以看到日志插件的加载顺序:
当执行数据库操作的时候,就会打印出相应的日志:
那么问题来了,我们在代码中并没有写打印语句呀,它是在哪里调用的呢?
这就是MyBatis的优秀之处,真正做到了业务与技术分离。