Mybatis
2024-11-14 10:56:22 0 举报
Mybatis底层流程概况
作者其他创作
大纲/内容
mybatisl里面一个重要的参对象
是否懒加载
applyAutomaticMappings自动填充结果集映射
嵌套结果集handleRowValuesForNestedResultMap
填充缓存暂存区
doUpdate
结果集处理
StatementHandler执行流程【和上面贯穿】
是否存在缓存
updat【默认开启flushCache】
关闭
BlockingCache【防穿透】
ScheduledCache【过期清理】
参数处理器
ParameterHandler
typeAliasRegistryinterceptorChain
handleRowValues
handleResultSets->handleResultSet
可以重用执行器
query执行查询
executor执行SQL
此分支为具体执行细节
createResultObject 创建对象具体实现
提交暂存区
query
newResultSetHandler
全局组件
插件拦截interceptorChain【后续补充】
二级缓存的实现原理和流程 后续补
ResultSetHandler
prepareStatementhandler.parameterize(stmt)
getPatameterHandler获取参数处理器
newExecutor
有缓存
参数处理
和上面流程贯穿
获取嵌套查询值
LRUCache【防溢出】
SQL
创建statementHandlerHandler.prepare
执行
mapperRegistrycaches
通过MetaClass类的Reflector反射器处理属性
结果集处理器
为PreparedStatement设置参数
预处理器【防注入】 99%的场景都是用这个,性能高且安全
结果结处理
Start
参数值
ReuseExecutor
StatementHandler
全局配置
主要方法
BaseStatementHandler
PropertyTokenizer属性分词器一个牛逼的工具类
是否命中一级缓存
顶层接口Executor
查询数据库
queryCursor查询游标
声明Statement
newStatementHandler
懒加载内部实现流程分析
doQuery方法开始
PreparedStatementHandler
clearLoadCache清理暂存区
update
applyPropertyMappings手动填充结果集映射
参数映射
实现这个方法解析动态SQL
简单结果集handleRowValuesForSimpleResultMap
SimpleStatementHandler
batch执行批处理
doQuery
prepareStatementHandler
PerpetualCache【内存存储】
commit提交
6个组件并且采用装饰器+责任链完成功能
prepare()基于connection创建Statement
基于JDBC 处理器
中转节点
实时加载
一级缓存相关备注一:命中条件1:同一个回话2:SQL语句参数相同3:相同的statementID4:分页范围相同二:一级缓存清空的几种情况1:手动操作【提交,回滚】2:配置flushCache3:执行了update4:缓存作用域是statement三:一级缓存失效的几种情况
重要元素一级缓存占位符EXECUTION_PLACEHOLDERqueryStack:查询层级以及延迟加载此处也说明了一级缓存不能关闭的原因
getBoundSql获取动态SQL
MetaObject是通过BeanWrapper
DefaultParameterHandlersetParameters方法开始预处理参数
执行SQL
通过createRowKey获取getRowValue
typeHandlerRegistryresultMaps
getRowValue把结果集的每一行转换成对应对象
获取嵌套查询的值getNestedQueryMappingValue
newParameterHandler
SynchronizedCache【线程同步】
MetaObject【处理映射关系】
二级缓存命中条件1:必须要会话提交之后且要手动提交,自动提交不行2:SQL语句和参数要相同3:StatementID要相同4:RowBounds要相同
执行器
Executor
懒加载
二级缓存Caching Executor【最终实现的装饰者delegate】
批处理执行器
获取处理器 newStatementHandler
存储过程处理器
BaseExecutor【一级缓存localCache】会话级别缓存共性功能在此处理
预处理参数
通过createRowKey获取RowKey
具体实现类
parameterize预处理参数
后续补充
简单工厂
LoggingCache【记录命中率】
BatchExecutor
无缓存
简单执行器
定义:JDBC处理器,声明Statement,填充参数并且执行SQL,每次会话都会有与之相对应且唯一的Statement实列
简单查询addPendingChildRelation
延迟加载
预处理
填充属性
CallableStatementHandler
数据库
基本API【增删改查】辅助API【提交关闭会话】
预处理器
设置公共参数并创建Statement
二级缓存
SqlSession
简单处理器
解析并填充参数
执行准备
Configuration
statement = instantiateStatement(connection);
0 条评论
下一页