MybatisSql执行流程
2022-03-23 17:18:33 1 举报
mybatis执行流程
作者其他创作
大纲/内容
MapperProxyFactory
DefaultSessionFactory
execute
computeifAbsent
getMappedStatement
getTransactionFactoryFromEnvironment
queryFromDatabase
prepareStatement
getMapper
selectOne
createCacheKey
converArgsToSqlCommandParam
SqlSessionFactory
doQuery
getParameterMappings
command.getType()
newExecutor
newStatementHandler
newInstance
selectByPrimaryKey
query
new ProxyInstance
getBoundSql
executor.query
CachingExecutor
BaseExecutor
openSession
cachedMapperMethod
selectList
DefaultSqlSession
MapperRegistry
localCache.putObject
MapperProxy
new MethodSignature
1、SqlSessionFactory的openSession方法,调用DefaultSessionFactory的openSessionFromDataSource方法拿到sqlSession。2、调用getMapper方法,然后调用configuration的getMapper方法,再调用MapperRegistry的get方法,最终通过MapperProxyFactory构建出MapperProxy代理对象并返回。3、调用mapperProxy中查询方法时,会调用Invoke方法,判断代理对象是否是一个类,此时代理对象是一个接口,就会调用MapperMethod的cachedMapperMethod方法生成一个MappedMethod对象并执行其execute方法。4、因为这里是根据id查询,所以调用了DefaultSqlSession的selectOne方法,selectOne方法又调用了selectList方法,最终把查询操作委托给了Executor,调用了CachingExecutor的query方法。5、CachingExecutor的query会先从二级缓存获取数据,当二级缓存中没有数据时,则委托给BaseExecutor的子类操作。6、MyBatis默认使用SimpleExecutor,CachingExecutor先调用BaseExecutor的query方法,query方法调用queryFromDatabase,最终调用的是SimpleExecutor的doQuery方法。7、doQuery方法通过configuration构建StatementHandler(实际构建的是PreparedStatementHandler),调用prepareStatement方法获取连接,设置参数,prepareStatement方法调用PreparedStatementHandler的prepare方法对SQL进行预编译,实际就是JDBC的prepareStatement方法,返回预编译的结果给PreparedStatementHandler的query方法。8、query方法则调用JDBC的execute方法来执行编译好的SQL和调用ResultSetHandler的handleResultSets方法返回处理过的结果集。
openSession-FromDataSource
invoke
newTransaction
SimpleExecutor
configuration
get
new SqlCommand
MappedStatement
MapperMethod
quickStart
0 条评论
回复 删除
下一页