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

回到顶部