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中有两个地方用到单例模式,ErrorContextLogFactory,其中 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日志包的适配。

相关推荐

  1. MyBatis框架5设计模式总结

    2023-12-10 12:52:04       39 阅读
  2. Spring框架8设计模式

    2023-12-10 12:52:04       37 阅读
  3. Spring框架常用设计模式

    2023-12-10 12:52:04       41 阅读
  4. Spring框架11设计模式设计模式之美)

    2023-12-10 12:52:04       14 阅读
  5. C++23设计模式

    2023-12-10 12:52:04       8 阅读
  6. 解析5常用Python设计模式

    2023-12-10 12:52:04       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 12:52:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 12:52:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 12:52:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 12:52:04       18 阅读

热门阅读

  1. FPGA | Modelsim仿真

    2023-12-10 12:52:04       41 阅读
  2. pytorch 钩子函数hook 详解及实战

    2023-12-10 12:52:04       40 阅读
  3. vue.js怎么保证计算精度

    2023-12-10 12:52:04       36 阅读
  4. rollup打包报错“semantic error TS2802”

    2023-12-10 12:52:04       37 阅读
  5. 4-Docker命令之docker rename

    2023-12-10 12:52:04       29 阅读
  6. JVM常用调优参数

    2023-12-10 12:52:04       40 阅读
  7. 信息学奥赛一本通1851:【08NOIP提高组】笨小猴

    2023-12-10 12:52:04       40 阅读