跳至主要內容

MyBatis源码学习

holic-x...大约 2 分钟框架持久层框架MyBatis

2.MyBatis源码学习

【1】涉及到的设计模式

​ Builder模式:例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;

​ 工厂模式:例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;

​ 单例模式:例如ErrorContext和LogFactory;

​ 代理模式:Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;

​ 组合模式:例如SqlNode和各个子类ChooseSqlNode等;

​ 模板方法模式:例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;

​ 适配器模式:例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

​ 装饰者模式:例如Cache包中的cache.decorators子包中等各个装饰者的实现;

​ 迭代器模式:例如迭代器模式PropertyTokenizer;

Builder模式

​ Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分。

​ 在Mybatis环境的初始化过程中,SqlSessionFactoryBuilder会调用XMLConfigBuilder读取所有的MybatisMapConfig.xml和所有的Mapper.xml文件,构建Mybatis运行的核心对象Configuration对象,然后将该Configuration对象作为参数构建一个SqlSessionFactory对象。

​ 其中XMLConfigBuilder在构建Configuration对象时,也会调用XMLMapperBuilder用于读取Mapper文件,而XMLMapperBuilder会使用XMLStatementBuilder来读取和build所有的SQL语句。在这个过程中,这些Builder会读取文件或者配置,然后做大量的XpathParser解析、配置或语法的解析、反射生成对象、存入结果缓存等步骤,这么多的工作都不是一个构造函数所能包括的,因此大量采用了Builder模式来解决。

​ 对于builder的具体类,方法都大都用build开头,比如SqlSessionFactoryBuilder为例,它包含以下方法:即根据不同的输入参数来构建SqlSessionFactory这个工厂对象。

工厂模式

​ 在Mybatis中比如SqlSessionFactory使用的是工厂模式(简单工厂模式)。

​ 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3