Mybatis核心流程图
2020-04-08 14:55:49 0 举报
Mybatis核心流程图
作者其他创作
大纲/内容
return MapperProxy代理类
责任链模式
getConfiguration
根据不同的方法类型执行
TransactionFactory
DefaultSqlSession#selectList()或update()
否
DB
prepareStatement
调用Executor中的方法执行sql
configuration.getEnvironment()
Configuration
XMLMapperBuilder#parse
openSessionFromDataSource
configuration.add(MappedStatement)
不同的executor不同的实现方式以simple为例
return DefaultSqlSession
StatementHandler
new MapperProxy
mapperRegistry.getMapper
创建font color=\"ff0000\
SQL执行simpleExecutorBatchExecutorReuseExecutor
SimpleExecutor
一次开启一个statement
return DefaultSqlSessionFactory(config)
插件
getMapper
未命中
Proxy.newProxyInstance
SqlSession
xml/其他配置mybatis-config.xmlMapper.xml
XMLConfigBuilder#parse
new RoutingStatementHandler
核心层
代理模式
MapperRegistry#addMappe
按照配置的策略,选择具体的执行模式
返回
处理2级缓存
configurationElement
buildStatementFromContext
CachingExecutor.query
ReuseExecutor
已sql位key缓存statement
处理缓存
XMLStatementBuilder#parseStatementNode
判断需要执行sql区别object的本身方法和default方法
doQuery
DefaultResultSetHandler#handleResultSets
参数处理属性映射参数映射动态SQL
是
PreparedSatement.execute()
baseExecutor.query
invoke
根据配置策略创建Executor
解析configuration标签
Configuration#addMapper
命中
装饰器模式
return new DefaultSqlSession
configuration.getMapper
bindMapperForNamespace
预处理操作具体执行的是上面创建的预处理方法
mapper标签
BaseExecutor
handler.parameterize(stmt)
BatchExecutor
SqlSessionFactoryBuilder
mapper解析
解析成MappedStatement
SqlSessionFactory
存有1.SqlCommand2.MethodSignature
openSession
BoundSql
Executor
sql真正的执行者
继续注解的解析MapperAnnotationBuilder.parse
解析所有的一级标签。并存到configuration中,configuration中保存了所有标签对应的对象
创建事务,这个是对数据库连接的封装
MapperProxyFactory
接口层SqlSession
1.SimpleStatementHandler2.PreparedStatementHandler3.CallableStatementHandler
getMapper返回代理执行
调父类初始化BaseBuildernew Configuration
BaseExecutor抽象模板模式
<plugins>标签解析成Interceptor对象放到InterceptorChain list中
interceptorChain.pluginAll
MapperMethod#execute
queryFromDatabase
获取 MapperMethod并Map缓存起来
knownMapper.get(type)之前的addMapper时存的代理工厂类
策略模式
配置解析ConfigurationMapperStatementParameterMappingResultMapping
doQuery或doUpdate
configuration.newExecutor
MapperProxy执行Executor
创建font color=\"ff3333\
调用jdbc的执行方法
处理执行结果类型转化ResultSetHandler的默认实现
StatementHandler.query
mapperElement
根据配置决定创建哪一种预处理的类型
基础层日志缓存数据源/连接池事务反射....
parseConfiguration
一级缓存PerpetualCache
查询操作,会找缓存更新操作会clear缓存
执行具体预处理的方法
CachingExecutor
有配置2级缓存 对原先的执行器包装
是否开启缓存
newTransaction
0 条评论
下一页