目录:
1、开发重点知识
- MyBatis快速入门
- result 与 resultMap
- 怎么样传递多个参数
- 获取主键
- SQL 的参数
- 代码生成器
- 关联查询
- 缓存
- 与 spring 的集成
2、源码骨架分析
- 整体架构
- 日志模块分析
- 数据源模块分析
- 缓存模块分析
- 反射模块分析
3、源码流程分析
- 流程整体分析
- 配置加载阶段
- 代理阶段分析
- 数据读写阶段
4、知识拾遗
- 与 spring 的结合源码分析
- 插件开发
- 手写 MyBatis
MyBatis 源码流程分析
1,流程整体分析
1.1 MyBatis 核心流程三大阶段
1.2 MyBatis 的初始化
建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
- Product:要创建的复杂对象
- Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建;
- ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例;
- Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建;
MyBatis 建造者类图
- BaseBuilder:所有解析器的父类,包含配置文件实例,为解析文件提供的一些通用的方法;
- XMLConfigBuilder: 主要负责解析mybatis-config.xml;
- XMLMapperBuilder: 主要负责解析映射配置文件;
- XMLStatementBuilder: 主要负责解析映射配置文件中的SQL节点;
MyBatis 的初始化
映射器的关键类
- Configuration : Mybatis启动初始化的核心就是将所有xml配置文件信息加载到Configuration对象中, Configuration是单例的,生命周期是应用级的;
- MapperRegistry:mapper接口动态代理工厂类的注册中心。在MyBatis中,通过mapperProxy实现InvocationHandler接口,MapperProxyFactory用于生成动态代理的实例对象;
- ResultMap:用于解析mapper.xml文件中的resultMap节点,使用ResultMapping来封装id,result等子元素;
- MappedStatement:用于存储mapper.xml文件中的select、insert、update和delete节点,同时还包含了这些节点的很多重要属性;
- SqlSource:用于创建BoundSql,mapper.xml文件中的sql语句会被解析成BoundSql对象,经过解析BoundSql包含的语句最终仅仅包含?占位符,可以直接提交给数据库执行;
ResultMap图解
mappedStatment图解
configuration类图解
MyBatis初始化过程时序图
Sqlsession
创建SqlSession 策略模式
SqlSession相关类UML