mybatis
2022-11-10 16:43:04 12 举报
mybatis
作者其他创作
大纲/内容
handleResultSet对结果集进行映射
new SqlComman
是
prepareStatement完成Statement的创建和初始化
解析sql语句中设置的属性parseStatementNod、flushCache
否
configuration.addLoadedResource(\"namespace:\" + namespace)
返回值是否是map
构建sqlSource对象,返回statementType类型,返回值类型
delegate.<E> query
通过装饰器模式实现缓存功能
getConnection获取数据库连接对象
cleanUpAfterHandlingResultSet
mapperProxyFactory.newInstance(sqlSession)
configuration.newStatementHandler
是否是select操作
getFirstResultSet
执行MapperProxy
ms.getBoundSql 获取BoundSql对象,包含初始化sql和参数集
executeWithResultHandler
propertiesElement(root.evalNode(\"databaseIdProvider\"))根据不同数据库执行不同的SQL
Resources.getResourceAsStream
根据类型获取具体的执行器类型
openSessionFromDataSource获取默认执行器
getTransactionFactoryFromEnvironment获取TransactionFactory
new MapperMethod
XMLMapperBuilder#parse
里面包含了结果对象属性和类型以及所有的类型转化器
parseConfiguration解析所有的一级标签并存储到Configuration中
propertiesElement(root.evalNode(\"typeHandlers\"))类型处理器
CachingExecutor
<mapper url=\"\"/>
propertiesElement(root.evalNode(\"objectFactory\"))对象工厂,所有对象都要由工厂来产生
返回数据
configuration.addMapper(boundType);
propertiesElement(root.evalNode(\"properties\"))解析properties标签并添加到Configuration的variables中
1
构建XMLConfigBuilder,创建好Configuration
根据数据源,隔离等级,是否自动提交创建Transaction
handler.parameterize(stmt)处理sql占位符
实例化Statement
propertiesElement(root.evalNode(\"typeAliases\"))匹配时,可用类型别名
resultSetHandler.<E>handleResultSets(statement)
Resources.getResourceAsStream(resource)
cachedMapperMethod
解析namespace、cache-ref、cache、resultMap等标签
mappedStatement.getResultMaps()
sqlSessionFactory.openSession()获取SqlSession
配置select|insert|update|delete
XMLStatementBuilder#parseStatementNode遍历每一个增删改查的操作
判断数据是否为空
handler.update(stmt)
executeForMany
configurationElement配置mapper元素
buildStatementFromContext
DefaultSqlSession#selectList
configuration.getMappedStatement(statement)获取方法对应的MappedStatement
insert|update|delete
localCache.getObject(key)从一级缓存中获取数据
queryFromDatabase
SimpleExecutor
是否开启二级缓存
ReuseExecutor
二级缓存是否为空
statement.close()
methodCache中判断是否存在
3
是否返回多条数据
BatchExecutor
createCacheKey创建CacheKey
2
Resources.getUrlAsStream(url)
propertiesElement(root.evalNode(\"settings\"))解析setting标签
<mapper class=\"\"/>
handler.query(stmt)执行sql语句并完成结果集映射
循环
创建好MappedStatement,添加到mappedStatements
不存在
statement.execute(sql)
executeForMap
循环遍历
new MethodSignature
flushCacheIfRequired 刷新二级缓存再更新
数据是否为空
propertiesElement(root.evalNode(\"objectWrapperFactory\"))对象包装器工厂
sqlSession.getMapper
propertiesElement(root.evalNode(\"plugins\"))插件解析并添加到Configuration的interceptorChain中
是否使用二级缓存
newInstance动态代理生成对象InvocationHandler是MapperProxy
<package name=\"\"/>
propertiesElement(root.evalNode(\"environments\"))获取环境,包括事务管理器和数据源
返回值为void并且有结果处理器
bindMapperForNamespace
configuration.addLoadedResource(resource)放入loadedResources表示已经加载过了
includeParser.applyIncludes解析include节点
<mapper resource=\"\"/>
MapperRegistry#addMapper
executor.query
executor.update
new SqlSessionFactoryBuilder().build(inputStream)构建SqlSessionFactory
单一结果
sqlSession.selectOne
获取参数类型,设置keyGenerator
parser.parse解析config文件
propertiesElement(root.evalNode(\"mappers\"))获取映射器
clearLocalCache 清除一级缓存
<mapper/>
0 条评论
下一页