Mybatis源码(三)之SqlSession执行流程全貌
2017-11-10 18:55
701 查看
上一篇博文解释了SqlSession是如何创建的Spring整合mybatis创建SqlSession
本篇博文注重你对流程的理解,可以增长你的内功修为。
后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态Sql,读取配置文件等。
后者注重于你调试(就是码农干的事情),前者让你从全局更了解Mybatis工作流程。
了解全貌之后,遇到什么问题,或者着重看那块,能帮你快速定位源码,省下的就是苦力活了,跟进去看。
Mybatis的SqlSession看懂两个方法就足以:
本篇在分析下update方法,下图(重要)核心时序图
这张图可以看做是Mybatis最核心的时序图,是Mybatis的流程的全貌!!!!
有必要的话就需要温故jdbc
分析下如下的几个组件:
不知道大家看到这个张图、这些组件有什么感想没?
对于一个复杂的大型项目,怎样将一个大功能,拆分成相关的模块组件,让每个组件各司其职,怎么达到可拓展,可维护。
这张图会一致伴随着我们源码分析的过程,比较重要。
如下的几个组件会在接下来的博文中展开来分析:
这里临时只是贴几张图,只是为了能够更清楚整个流程,方便理解、记忆。
Executor组件
默认情况我们使用的SimpleExecutor defaultExecutorType是Configure的一个成员的 默认是simple
修改默认Executor可以这样配置:
枚举值ExecutorType.BATCH= BATCH
三个执行器:
StatementHandler组件
本篇博文注重你对流程的理解,可以增长你的内功修为。
后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态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 创建Statement ParameterHandler、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 /update ReuseExecutor -执行器会重用预处理语句(prepared statements)Map< Sql,StateMent> BatchExecutor --它是批量执行器 addBatch flush
StatementHandler组件
相关文章推荐
- mybatis源码分析(一,sqlSessionFactory的创建流程)
- mybatis源码分析,sql语句执行的完整流程
- MyBatis源码分析-SQL语句执行的完整流程
- MyBatis源码分析-SQL语句执行的完整流程
- mybatis源码学习之执行过程分析(1)——SqlSessionFactory及SqlSession的创建
- mybatis系列(四)--mybatis的核心:sql的执行流程(深入源码)
- MyBatis源码学习笔记(十)SQL执行流程分析
- Mybatis 源码 sql执行流程分析
- MyBatis源码分析-SQL语句执行的完整流程
- Mybatis3源码分析(13)-Sql解析执行-BoundSql的加载-2
- 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
- MyBatis-Spring 执行SQL语句的流程
- Mybatis-Spring SqlSessionTemplate 源码解析
- Mybatis工作机制源码分析—SqlSessionUtils.getSqlSession工作机制
- 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)(转)
- Mybatis3源码分析(11)-Sql解析执行-BoundSql的加载-1
- mybatis源码分析(3)-----SqlSessionHolder作用
- myBatis源码之SqlSession
- Mybatis架构设计及源码分析-SqlSessionFactory
- mybatis源码学习之执行过程分析(5)——sql执行后ResultSet的处理及结果返回