Mybatis源码(三)之SqlSession执行流程全貌
来源:互联网 发布:淘宝素材图片 编辑:程序博客网 时间:2024/06/04 20:00
上一篇博文解释了SqlSession是如何创建的Spring整合mybatis创建SqlSession
本篇博文注重你对流程的理解,可以增长你的内功修为。
后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态Sql,读取配置文件等。
后者注重于你调试(就是码农干的事情),前者让你从全局更了解Mybatis工作流程。
了解全貌之后,遇到什么问题,或者着重看那块,能帮你快速定位源码,省下的就是苦力活了,跟进去看。
Mybatis的SqlSession看懂两个方法就足以:
public int update(String statement, Object parameter)public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds)
本篇在分析下update方法,下图(重要)核心时序图
这张图可以看做是Mybatis最核心的时序图,是Mybatis的流程的全貌!!!!
有必要的话就需要温故jdbc
分析下如下的几个组件:
SqlSessionInterceptor是代理,dao方法就是在这里被拦截所有流程都是改方法展开的DefaultSqlSession 负责获取SqlSession,执行dao方法,提交事务Executor SqlSession委托职责给它,获取Conn,获取Statement,提交事务等Transaction 事务对象,获取Conn)、提交回滚StatementHandler 创建StatementParameterHandler、ResultHandler图中未表示出,拼接以及参数如何放入Statement、以及返回结果处理类ResultHandler
不知道大家看到这个张图、这些组件有什么感想没?
对于一个复杂的大型项目,怎样将一个大功能,拆分成相关的模块组件,让每个组件各司其职,怎么达到可拓展,可维护。
这张图会一致伴随着我们源码分析的过程,比较重要。
如下的几个组件会在接下来的博文中展开来分析:
这里临时只是贴几张图,只是为了能够更清楚整个流程,方便理解、记忆。
Executor组件
默认情况我们使用的SimpleExecutor defaultExecutorType是Configure的一个成员的 默认是simple
修改默认Executor可以这样配置:
<bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <!--更新采用批量的executor --> <constructor-arg index="1" value="BATCH"/> </bean>
枚举值ExecutorType.BATCH= BATCH
三个执行器:
SimpleExecutor -- SIMPLE 默认执行的执行器 select /updateReuseExecutor -执行器会重用预处理语句(prepared statements)Map< Sql,StateMent>BatchExecutor --它是批量执行器 addBatch flush
StatementHandler组件
阅读全文
1 0
- Mybatis源码(三)之SqlSession执行流程全貌
- 读mybatis源码之三:执行逻辑之一SqlSession直接执行
- MyBatis源码分析(三)-SqlSession理解
- mybatis源码解析(三)SqlSession
- (四)MyBatis源码解析之SqlSession
- mybatis源码学习之执行过程分析(1)——SqlSessionFactory及SqlSession的创建
- myBatis源码学习之SqlSession
- Mybatis源码(二)之Spring整合mybatis创建SqlSession
- mybatis源码解析之SqlSession接口。
- Mybatis源码阅读之SqlSession创建
- MyBatis集合Spring(二)之SqlSession
- 【SSM】Mybatis之SqlSession
- Mybatis 之 SqlSession
- Mybatis-SqlSession执行过程说明
- 读mybatis源码之二:构建SqlSession逻辑
- Mybatis源码分析之SqlSessionFactory,SqlSession和连接池
- mybatis使用之SqlSession获取
- mybatis之入门到开发(三)之常用对象SqlSessionFactory和SqlSession,动态sql,输入映射和输出映射
- C#简单的在图片上添加文字并保存
- 再谈找负环
- UVa 10370 Above Average
- ACM准备之路(蓝桥杯5)杨辉三角公式解法
- 浅谈DMA
- Mybatis源码(三)之SqlSession执行流程全貌
- JAVA项目中数据库表的设计思路
- 第三个春天
- 操作系统实验——内存管理
- L1-030. 一帮一
- C语言基础(一)
- 从零开始搞懂Android网络请求——JSON数据的解析与Gson框架的使用
- vc 遍历目录下的文件与总数
- leetcode题解-344. Reverse String && 541. Reverse String II && 345. Reverse Vowels of a String