Mybatis 设计模式

常用设计模式

单例模式

私有构造器, 对外提供实例方法

  • ErrorContext
  • LogFactory

构造者模式

封装复杂的创建对象的过程, 通过 build 方法生成对象实例

  • SqlSessionFactoryBuilder: 构建 SqlSessionFactory 对象
  • XMLConfigBuilder: 解析整个Mybatis的配置
  • XMLMapperBuilder:解析Mapper映射器
  • XMLStatementBuilder:解析增删改查标签
  • XMLScriptBuilder:解析动态SQL

工厂模式

通过工厂创建出具体的对象

  • SqlSessionFactory
  • MapperProxyFactory
  • DataSourceFactory

动态代理

Mybatis 中定义方法的时候使用的都是接口的方式,接口是不能进行实例化操作的,因此在使用具体对象的时候需要使用动态代理来创建出具体的代理对象 MapperProxy

装饰者模式

Cache 包下,Cache是一个接口,具体的子类实现是 PertualCache, 在 decorators 包下包含了一系列的其他实现,通过装饰者模式实现的(如:WeakCache / BlockingCache / LruCache / FifoCache)

组合模式

  • ChooseSqlNode
  • IfSqlNode

模板方法模式

Executor,BaseTypeHandler,IntegerTypeHandler…..

责任链模式

在 plugins 模块中,包含了 interceptor, interceptorChain

适配器模式

日志模块使用适配器模式,各个子包实现

迭代器模式

PropertyTokenizer