用源码流程图来描述mybatis的执行原理
一、根据配置文件创建SQLSessionFactory
- 创建SqlSessionFactoryBuild对象
- build(input Stream)
- 创建解析器
- 解析每一个标签将详细信息保存到config中
- 解析mapper
- 返回config
- build(config)
- new defaultSqlSession()
- 返回创建的DefaultSqlSession,包含了保存全局的配置信息的config
总结:把配置文件的信息解析并保存在config对象中返回包含了 config的default对象
二、Executor创建
- 返回SqlSession的实现类DefaultSqlSession对象,它里面包含了Exector和Config;executor会在这一步被创建。
- openSession()
- openSessionFromDataSource()
- 获取信息 ,创建tx
- newExecutor()
- 根据Exector在全局配置中的类型,创建出SimpleExector/ReuseExrcutor/BatchRxcutor
- 如果有二级缓存配置开启,创建CachingExecutor(executor)
- exector =(Exector)interceptorChain.pLuginAll(exector);使用每一个拦截器重新包装exector并返回
- 创建DefaultSqlSession,包含config和Executor
- 返回DefaultSqlSession
、
三、GetMapper返回接口的代理对象包含了SqlSession对象
四、查询流程