mybatis主流程时序图(一)
以下是生成SqlSession的调用链:
SqlSessionManager的类 field:
sqlSessionFactory:sqlSession工厂类
sqlSessionProxy:sqlSession代理类
localSqlSession:线程变量
method:
newInstance(...) :实例化SqlSessionManager,构造函数私有化
startManagedSession(...):将sqlSession存入线程变量中
openSession(...):创建sqlSession
select/update/delete/insert:使用sqlSessionProxy执行
getConnection/clearCache/commit/rollback/close:localSqlSession.get()获取的sqlSession执行
SqlSessionInterceptor:创建sqlSessionProxy的InvocationHandler;
当localSqlSession.get()有值时,执行invoke方法;
反之,调用openSession方法,并主动执行commit方法;
SqlSessionFactory的类 field:
configuration:sqlSessionFactoryBuilder中将xml进行解析获取到到Configuration对象
method:
openSession(...):创建SqlSession所需要的参数
execType: 执行器的类型(SIMPLE, REUSE, BATCH),通过调用方传入 or 配置类中获取
TransactionIsolationLevel: 事务隔离级别
autoCommit:是否自动提交
connection:数据库连接
openSessionFromDataSource:
openSessionFromConnection:
1.通过配置文件中获取Environment,以获取TransactionFactory;
2.TransactionFactory获取事务可通过两种方式,
connection:数据库连接
(dataSource、level、autoCommit):数据源/事务隔离级别/自动提交
通过以上两种方式创建事务,其实事务其实就是建立在connection基础上的,第二种方式是通过
dataSource创建connection,然后设置connection的隔离级别和自动提交标记
3.通过execType和Transaction创建Executor执行器
4.通过executor、configuration、autoCommit构造SqlSession对象
SqlSession类 field:
configuration:配置对象
executor:执行器
autoCommit:是否自动提交
method:
selectList/selectOne/selectMap:调用executor.query(...),默认Executor.NO_RESULT_HANDLER
select:调用executor.query(...),传入的ResultHandler;
insert/update/delete:调用executor.update方法
commit:executor.commit
rollback:executor.rollback
flushStatements:executor.flushStatements
close:executor.close
closeCursors:executor.closeCursors
SimpleExecutor: field:
transaction:事务
configuration:配置对象
method:
doQuery:
doUpdate:
doQueryCursor:
1.通过MappedStatement获取configuration
2.创建StatementHandler
3.调用prepareStatement方法
4.调用StatementHandler.query/update/queryCursor方法
prepareStatement:
1.获取connnection;
2.调用StatementHandler.prepare初始化prepareStatement对象并返回
3.调用StatementHandler.parameterize填充占位符
StatementHandler类 field:
parameterHandler:参数处理器
resultSetHandler:返回值处理器
method:
update/batch/query/queryCursor:调用Statement.execute方法
instantiateStatement:初始化Statement
parameterize:填充占位符值
以上是调用链涉及到的类属性和方法;后续会针对调用链中的每个流程进行分析;
以上是 mybatis主流程时序图(一) 的全部内容, 来源链接: utcz.com/z/514119.html