mybatis运行原理
目录
框架分层架构
引导层:使用mybatis框架获取SqlSessionFactory,可以使用全局配置文件也可以使用功能java api调用的方式。
框架支撑层:sql语句配置 sql映射文件
数据处理层,原生的jdbc组件
接口层:暴露给用户调用的几种方式
运行流程图
Executor执行器
ParameterHandler 参数处理器
ResultSetHandler 结果集处理器
StatementHandler sql语句处理器
第一步 获取SqlSessionFactory对象
解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSessionFactory。
注意:MappedStatement 代表一个增删改查的详细信息,时序图如下:
XPathParser 基于dom4j xpath解析的工具,使用这个解析器解析xml
整个初始化工作都是在往configuration里保存东西
第二步 获取SqlSession对象
返回一个DefaultSqlSession对象,包含Executor和Configuration。
如果有开启二级缓存配置,则会使用装饰者模式创建CachingExecutor(executor)。
使用每一个拦截器插件重新包装executor
第三步 获取接口的代理对象(MapperProxy)
getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
代理对象里面包含了,DefaultSqlSession(Executor)
第四步 执行增删改查方法
时序图
查询流程总结
- StatementHandler:处理sql语句预编译,设置参数等相关工作;
- ParameterHandler:设置预编译参数用的
- ResultHandler:处理结果集
- TypeHandler:在整个过程中,进行数据库类型和javaBean类型的映射
总结
mybatis运行步骤
- 根据配置文件(全局,sql映射)初始化出Configuration对象
- 创建一个DefaultSqlSession对象,它里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
- DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;MapperProxy里面有(DefaultSqlSession);
- 执行增删改查方法:
- 调用DefaultSqlSession的增删改查(Executor);
- 会创建一个StatementHandler对象。同时也会创建出ParameterHandler和ResultSetHandler)
- 调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数
- 调用StatementHandler的增删改查方法;
- ResultSetHandler封装结果
注意
四大对象(Executor、ParameterHandler、ResultSetHandler)每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);