在梳理完MyBatis框架的加载、使用以及延迟加载的流程之后,对这个框架有了一个较为深刻的认识,所以对在这些过程中使用到的一些类和组件进行一个总结和梳理,再从全局角度重新审视一下MyBatis框架。
BaseBuilder
在MyBatis框架初始化过程中,利用到了建造者模式来对各种配置进行解析,BaseBuilder抽象类作为建造者的接口,在其中定义了几个核心字段,例如Configuration,所有解析的结果都存放在Configuration当中,TypeAliasRegistry别名注册器和TypeHandlerRegistry类型处理注册等,这些东西构成了MyBatis的核心。
他的几个重要子类如上图所示,XMLConfigBuilder重要对mybatis-config.xml进行解析,
XMLStatementBuilder对具体的sql语句进行解析,XMLMapperBuilder和MapperBuilderAssistant这两个协作对mapp.xml进行解析,builder专注于解析mapper文件获取数据,assistant专注于加载处理解析出的数据,例如建立缓存和映射关系等等。
SqlSession
MyBatis的核心接口,通过SqlSessionFactory工厂对象创建,SqlSessionFactory工厂对象又通过SqlSessionFactoryBuilder来加载,通常情况下SqlSessionFactoryBuilder只用创建一次,用来加载SqlSessionFactory对象,SqlSessionFactory是全局通用的,只需要通过Builder加载一次即可,通过SqlSessionFactory可以创建多个SqlSession对象,每个会话对象可以多次执行sql语句,可通过全限定名+id的方式直接执行sql,也可以通过获取Mapper对象的方式通过Mapper来执行每个映射下的指定sql。
Executor
Executor是MyBatis的核心接口,其中定义了数据库操作的基本方法,包括事务、缓存、增删改查等,SqlSession接口的一些功能就是Executor实现的,在query时会将结果存入缓存,在update时会将缓存清除等等,这些都是一级缓存。
Handler
主要负责真正的处理动作,例如在执行查询方法时,handler负责解析出sql语句并交给statement执行。