MyBatis框架中的5种设计模式总结
前言
MyBatis框架中使用的5种设计模式分别是:1、建造者模式(生成器模式)。2、工厂模式。3、单例模式。4、代理模式。5、适配器模式。
1、建造者模式(生成器模式)
在MyBatis环境的初始化过程中,SqlSessionFactoryBuilder
会调用?XMLConfigBuilder
读取
所有的MyBatisMapConfig.xml
和所有的 *Mapper.xml
文件,构建MyBatis运行的核心对象
Configuration
对象,然后将该Configuration
对象作为参数构建一个SqlSessionFactory
对
象。
2、工厂模式
-
在MyBatis中比如
SqlSessionFactory
使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。 -
SqlSession
可以认为是一个MyBatis工作的核心的接口,通过这个接口可以执行执行SQL语句、获取Mappers、管理事务。类似于连接MySQL的Connection
对象。
3、单例模式
-
在MyBatis中有两个地方用到单例模式,
ErrorContext
和LogFactory
,其中ErrorContext
???????是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息,而LogFactory
则是提供给整个MyBatis使用的日志工厂,用于获得针对项目配置好的日志对象。
?public class ErrorContext {
? ? ?/**
? ? ? * 每个线程各自的数据
? ? ? */
? ? ?private static final ThreadLocal<ErrorContext> LOCAL = new ThreadLocal<>();
??
? ? ?private ErrorContext() {
? ? }
??
? ? ?public static ErrorContext instance() {
? ? ? ? ?ErrorContext context = LOCAL.get();
? ? ? ? ?if (context == null) {
? ? ? ? ? ? ?context = new ErrorContext();
? ? ? ? ? ? ?LOCAL.set(context);
? ? ? ? }
? ? ? ? ?return context;
? ? }
??
?}
-
构造函数是private修饰,具有一个static的局部instance变量和一个获取instance变量的方法,在获取实例的方法中,先判断是否为空如果是的话就先创建,然后返回构造好的对象。
-
只是这里有个有趣的地方是,LOCAL的静态实例变量使用了
ThreadLocal
修饰,也就是说它属于每个线程各自的数据,而在instance()
方法中,先获取本线程的该实例,如果没有就创建该线程独有的ErrorContext
。
4、代理模式
代理模式可以认为是MyBatis的核心使用的模式,正是由于这个模式,我们只需要编写 Mapper.java
接口,不需要实现,由MyBatis后台帮我们完成具体SQL的执行。
5、适配器模式
-
在MyBatis的logging包中,有一个Log接口:
该接口定义了MyBatis直接使用的日志方法,而Log接口具体由谁来实现呢?
-
MyBatis提供了多种日志框架的实现,这些实现都匹配这个Log接口所定义的接口方法,最终实现了所有外部日志框架到MyBatis日志包的适配。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!