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