MyBatis框架的工作原理
2017-10-23 20:25
288 查看
每学习一个新知识,不管是框架,还是语言,永远都是以helloworld开始的,我们的mybatis也一样是这样子的
1.获取sqlSessionFactory对象:SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
解析文件的每一个信息保存在Configuration中,返回包含了Configuration的DefaultSqlSession对象
注意:MappedStatement:代表一个增删改查的详细信息
![](https://img-blog.csdn.net/20171023204117212?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
----------Configuration封装了所有配置文件的信息---------总结:把配置文件的信息解析并保存在Configuratiion对象中,返回包含了Configuration的DefaultSqlSession对象
2.获取sqlSession对象:sqlSession openSession = sqlSessionFactory.openSession();
返回一个DefaultSqlSession的对象,他包含了 Executor和Configuration
这一步会创建Executor对象
![](https://img-blog.csdn.net/20171023205121745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
-----------返回SqlSession的实现类DefaultSqlSession的对象,他包含了 Executor和Configuration,Executor会在这一步被创建。
3.获取接口代理的对象(会为接口自动创建一个代理对象,代理对象去执行增删改查):MapperProxy
getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
代理对象包含了DefaultSqlSession(Executor)执行增删改查
![](https://img-blog.csdn.net/20171023205904891?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
---------------getMapper返回接口的代理对象,包含了SqlSession对象-----------
4.执行增删改查的方法:
![](https://img-blog.csdn.net/20171023210948362?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20171023211002288?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20171023211235392?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
总结:
1.根据配置文件初始化出Configuration对象
2.创建出DefaultSqlSession对象
他里面包含Configuration和Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3.[b]DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy[/b]
4.MapperProxy里面有[b]DefaultSqlSession[/b]
5.执行增删改查方法:
调用[b]DefaultSqlSession的增删改查(Executor)[/b]
会创建一个StatementHandler对象(同时会创建出ParameterHandler和ResultSetHandler)
调用StatementHandler预编译参数以及设置参数值
使用ParameterHandler来给sql设置参数
调用StatementHandler的增删改查方法
使用ResultSetHandler封装结果
注意:
四大对象每个创建的时候都有一个interceptorChain.pluginAll(ParameterHandler)
![](https://img-blog.csdn.net/20171023212932382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemMxMzIwMDMwMzgy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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.[b]DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy[/b]
4.MapperProxy里面有[b]DefaultSqlSession[/b]
5.执行增删改查方法:
调用[b]DefaultSqlSession的增删改查(Executor)[/b]
会创建一个StatementHandler对象(同时会创建出ParameterHandler和ResultSetHandler)
调用StatementHandler预编译参数以及设置参数值
使用ParameterHandler来给sql设置参数
调用StatementHandler的增删改查方法
使用ResultSetHandler封装结果
注意:
四大对象每个创建的时候都有一个interceptorChain.pluginAll(ParameterHandler)
相关文章推荐
- SSM框架day02-MyBatis——003——MyBatis的作用、结构与工作原理
- java持久层框架-mybatis的工作原理
- 框架学习系列 mybatis 第二篇 mybatis的工作原理
- mybatis的工作原理
- Spring+SpringMVC+mybatis框架环境搭建总结
- Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- 【MyBatis框架】订单商品数据模型-分析思路
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- maven+springMVC+mybatis框架搭建
- mybatis源码分析1 - 框架
- Mybatis框架使用步骤
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 【MyBatis框架】查询缓存-二级缓存原理
- 04_SSM框架整合(Spring+SpringMVC+MyBatis)
- 【SpringMVC+mybatis】2.mybatis框架原理
- 学习mybatis框架中遇到org.apache.ibatis.exceptions.PersistenceException: 问题该怎么解决
- XNA那些事(一) 框架工作原理
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架(注解模式哦)
- Mybatis框架学习(1)——单表增删改查