Statement
2019-12-16 10:58:29 0 举报
mybaits执行必看
作者其他创作
大纲/内容
PreparedStatementHandler#parameterize
DefaultSqlSession#selectList
list=localCache.getObject(key)
第二步:第一步查询到的List
返回List集合
SimpleExecutor#query
构建statement对象
SynchronizedCache#getObject
LruCache#getObject
对prepare方法构建的预编译的SQL进行参数的设置
SerializedCache#getObject
BaseExecutor#queryFromDatabase
RoutingStatementHandler#prepare
创建StatementHandler
PreparedStatementHandler,parameterHandler,resultSetHandler 的创建都会执行interceptorChain.pluginAll(handler);为目标对象创建一个代理对象
PreparedStatementHandler#query
PerpetualCache localCache=new PerpetualCache(\"LocalCache\");
TransactionalCacheManager#getObject
Cache cache = ms.getCache();
传入statement
list == null
SimpleExecutor#doQuery
cache != null
执行sql
Y
ps.execute();
返回PreparedStatement
此cache在解析xml时分析过了,是被装饰器装饰过的cache,此处开始逐级调用
DefaultSqlSession#selectOne
BaseStatementHandler#prepare
BaseExecutor#handleLocallyCachedOutputParameters
第一步
二级缓存的保存条件,当会话提交或关闭之后才会填充二级缓存
重点说明:一级缓存是在创建SqlSession过程中创建的,生命周期为一次请求。二级缓存是在创建SqlSessionFactory过程中创建的,生命周期是应用结束
RoutingStatementHandler#query
N
开启二级缓存
RoutingStatementHandler#parameterize
第二步
DefaultResultSetHandler#handleResultSetst(ps)
RoutingStatementHandler#RoutingStatementHandler
LoggingCache#getObject
对PreparedStatemen处理
CachingExecutor#query
list != null
#ConfigurationnewStatementHandler
SimpleExecutor#prepareStatement
TransactionalCache#getObject
存入一级缓存
ScheduledCache#getObject
传入
PreparedStatementHandler#prepare
结果集处理
....
由图可知:二级缓存开启走的是CachingExecutor,简单看一下,update方法
PerpetualCache#getObject
BaseExecutor#query
未开启二级缓存
0 条评论
下一页