mybatis源码分析过程
1、准备期:
1.实例化sqlSessionFactoryBean(其实我认为这个类叫sqlSessionFactoryServer更准确,他是mybatis框架启动的入口)
a.加载configuration.xml和全部mapper.xml配置文件spring
b.加载各类配置参数
2.实例化BaseDao,其实就是为了为SqlSessionDaoSupport设置SqlSessionFactory,以便SqlSessionDaoSupport能够从Factory中拿到Session。Session是SqlSessionTemplate去工厂SqlSessionFactory中拿到的sql
2、使用期和完成期:
3.有了Session就能够在Dao中使用了。首先openSession
4.Dao中根据nameSpace+id去内存中找到具体的sql语句,而后根据传入的参数从新进行组装
5.数据库查询
6.根据数据库查询结果,组装返回值
7.关闭Session数据库
3、过程细节关注:
8.从3-8的过程里面有connection和statement是被封装在Executor中,事务也须要看,缓存也须要看
9.Spring的工厂模式,Spring的配置文件加载机制,mybatis的内存模型,sql到对象的组装技巧,反射应用。这里须要深刻理解Spring的源码。缓存
10.实例:Bean实例化用到的两个类(InitializingBean接口-afterPropertiesSet,ApplicationListener接口-onApplicationEvent)session
mybatis总结两个维度:
1、流程思路
1.初始化mybatis,读取spring配置,初始化mybatis的入口类SqlSessionFactoryBean(数据源、mapper.xml文件路径、configuration文件路径)
2.初始化mybatis,读取mybatis配置,初始化核心数据结构类Configuration(读取mybatis的配置文件、Environment配置信息、Mapper.xml配置文件)
3.定义Dao,全部Dao须要继承SqlSessionDaoSupport,而且要注入SqlSessionFactory,以便Dao能够获得session进行数据库操做
4.使用Dao,关注两个参数(statement句柄和入参),statement句柄的做用是从Configuration中找到MappedStatement,入参是要给MappedStatement构造sql语句
5.执行sql语句,按照resultType或者resultMap处理数据库操做结果resultSet数据结构
2、对象细节
(一)Configuration
1.保存setting信息
2.保存Environment信息(TransactionFactory【SpringManagedTransactionFactory】和DataSource)
3.保存mapperRegistry信息
4.保存mappedStatements信息mybatis
(二)SqlSessionFactoryBean
1.SqlSessionFactoryBean实现了Spring的FactoryBean<T>,InitializingBean, ApplicationListener
2.在InitializingBean的afterPropertiesSet方法中构造SqlSessionFactory的默认DefaultSqlSessionFactory对象,该对象中保存了Configuration对象app
(三)SqlSessionDaoSupport对象
全部Dao的父类,能够获得SqlSession。在实例化Dao的时候须要注入SqlSessionFactory对象。框架
(四)SqlSessionFactory对象
用来生产SqlSession对象,openSession和Configuration源码分析
(五)DefaultSqlSession对象
包含Configuration,Executor,autoCommit,Configuration用于获得各类信息数据,Executor也是经过Configuration建立的
SimpleExecutor和BaseExecutor是Executor的实现,Executor包装的是Transaction对象
ManagedTransaction是Transaction的实现,他包装的是Connection和Connection的提交和回滚
(六)MappedStatement对象
重要的是statementId,经过mapper.xml解析获得,被保存在Configuration对象中
(七)XMLScriptBuilder和NodeHandler
sql语句xml文件解析
3、重点关注
MapperScannerConfigurer