框架分层架构
- MyBatis框架的分为四个层,用户能够接触到的为接口层,框架支撑层,引导层,而中奖的数据处理层不需要用户关心,全部由MyBatis自己完成.
调试准备
- 准备一个HelloWorld例子
- 理解MyBatis的运行原理是为了能够理解四大对象的创建过程,只有理解过了四大对戏的创建原理,才可以区进行MyBatis插件开发
SqlSessionFactory的初始化
- 大致的流程
- 创建SqlSessionFactoryBuilder对象,使用SqlSessionFactoryBuilder类中的build()方法创建SqlSessionFactory对象.
- 在build()方法中,调用了XMLConfigBuilder类中的parse()方法,在parse()方法中,将从全局配置文件的根据根节点<configuration>开始,将解析所有的节点属性.
- 接着开始解析所有的mapper.xml文件
- 将解析mapper.xml文件中的所有的sql语句
- 然后将所有的信息保存到Configuration对象中,再返回一个DefaultSqlSessionFacory对象
openSession()获取SqlSession对象
- 在获取SqlSession对象过程之中有一个比较重要的步骤就是获取:Executor对象
-
MyBatis会根据根据不同的配置信息,创建出不同类型的Excutor对象,例如:根据是否配置缓存管理.
-
接着会执行所有拦截器的plugin()方法,这与插件开发有关
-
这里面会将所有的拦截器中的plugin()方法的返回值全部保存到"target"对象中
-
之后返回Excutor对象
- 最后返回DefaultSqlSession对象
getMapper()获取接口代理对象
- 在MapperRegistry类中将获取到一个MapperProxyFactory类对象
- 在MapperProxyFactory类中的newInstance()方法中见获取到MapperProxy对对象
- 在MapperProxy类中,通过实现动态代理,执行目标方法
查询流程
- 暂时没看懂,等日后再研究
查询流程总结
MyBatis运行流程总结
- 根据配置文件初始化处configuration对象
- 创建一个DefaultSqlSession对象,它里面包含Configuration以及Executor(根据配置文件中的defaultExecutorType创建出对应的executor)
- DefaultSqlSession.getMapper();拿到Mapper借口对应的MapperProxy.
- MapperProxy里面有(DefaultSqlSession)
- 执行增删改查方法:
- 调用DefaultSqlSession中的增删改查方法.
- 会创建一个StatementHandler对象(同时也会创建出ParamterHandler和ResultHandler)
- 调用StatementHandler预编译参数以及设置参数值
- 调用StatementHandler的增删改查方法;
- ResultSetHandler封装结果
- 四大对象每一个创建的时候都有一个interceptorChain…pluginAll(parameterHandler)