mybatis源码阅读第一天
源码阅读三要素
- 先读文档,在读代码,找到入口,带着目的读(我的目的是了解设计模式、编码风格、总体规划、分包分类等)
- 梳理整体结构,画图加深记忆,先不要钻细节
- 不要全读,60%左右就够了
mybatis全局配置文件
了解都有哪些属性,属性有什么优先级,属性含义,(官方文档说的注意的点,在读源码时的判断逻辑就会这样编写),这点很重要,摘自官方文档如下:
链接:mybatis官方文档链接
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
mybatis初始化
代码如下:
String file = "mybatis-config.xml";
Reader resources = Resources.getResourceAsReader(file);
// Environment environment = new Environment.Builder("development").build();
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resources,"development");
mybatis最核心的类是SqlSession,SqlSession是由SqlSessionFactory创建的,而SqlSessionFactory是由SqlSessionFactoryBuilder创建的,构建SqlSessionFactory使用了构建者模式,构建者模式是根据参数不同会创建不一样的对象,而SqlSessionFactory是工厂模式,会创建统一的对象,也就是一个模子出来的。
创建SqlSessionFactoryBuilder对象的时候,会发现里面使用了XMLConfigBuilder对象,XMLConfigBuilder对象通过XPathParser来解析配置文件,而XMLConfigBuilder对象里面有一个Configuration对象,这是初始化时最核心的一个对象,所有的配置属性以及相关策略都是在这个对象里面,那么接下来看是如何创建这个对象的。
Configuration初始化
直接上图:
sqlSessionFactory会话创建总图
SqlSessionFactory初始化
遇到的问题
发现初始化时,大量使用了反射,so,先学会反射,能够更好的理解源码了……
下一步是查看解析注册Mapper的源码。