MyBatis框架的工作原理
每学习一个新知识,不管是框架,还是语言,永远都是以helloworld开始的,我们的mybatis也一样是这样子的
1.获取sqlSessionFactory对象:SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
解析文件的每一个信息保存在Configuration中,返回包含了Configuration的DefaultSqlSession对象
注意:MappedStatement:代表一个增删改查的详细信息
----------Configuration封装了所有配置文件的信息---------总结:把配置文件的信息解析并保存在Configuratiion对象中,返回包含了Configuration的DefaultSqlSession对象
2.获取sqlSession对象:sqlSession openSession = sqlSessionFactory.openSession();
返回一个DefaultSqlSession的对象,他包含了 Executor和Configuration
这一步会创建Executor对象
-----------返回SqlSession的实现类DefaultSqlSession的对象,他包含了 Executor和Configuration,Executor会在这一步被创建。
3.获取接口代理的对象(会为接口自动创建一个代理对象,代理对象去执行增删改查):MapperProxy
getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
代理对象包含了DefaultSqlSession(Executor)执行增删改查
---------------getMapper返回接口的代理对象,包含了SqlSession对象-----------
4.执行增删改查的方法:
总结:
1.根据配置文件初始化出Configuration对象
2.创建出DefaultSqlSession对象
他里面包含Configuration和Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3.DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy
4.MapperProxy里面有DefaultSqlSession
5.执行增删改查方法:
调用DefaultSqlSession的增删改查(Executor)
会创建一个StatementHandler对象(同时会创建出ParameterHandler和ResultSetHandler)
调用StatementHandler预编译参数以及设置参数值
使用ParameterHandler来给sql设置参数
调用StatementHandler的增删改查方法
使用ResultSetHandler封装结果
注意:
四大对象每个创建的时候都有一个interceptorChain.pluginAll(ParameterHandler)