Mybatis源码学习-逻辑图
2021-03-04 10:43:03 3 举报
Mybatis源码底层逻辑分析
作者其他创作
大纲/内容
session
xml解析
setParameter
Object
SqlSourceBuilder
XMLLanguageDriver
root为Document实例
XMLConfigBuilder
mybatis-config.xml相关配置信息
SqlSession与Executor
mybatis-config.xml
Long
PreparedStatement.set*()
parameterType属性
ParameterHandler生成过程图例
StatementHandler
org.apache.ibatis.executor.resultset.ResultSetHandler
ParameterMapping生成过程图例
true
<databaseIdProvider>
INSERT
Statement.execute(sql)
<typeHandlers>
typeAliasRegistry
scripting
resultSetType属性
handler.handleToken
2
事务管理
解析xml文件
returnType为String
录入Mapper接口信息
TypeHandler
DynamicSqlSource
Excutor
GenericTokenParser
DefaultParameterHandler
处理动态节点
解析<selectKey>子标签
缓存管理
解析
<reflectorFactory>
handleResultSets
SqlSessionFactory
typeAliasesElement
Statement
ParameterMapping
setParameters((PreparedStatement) statement)
mybatis架构图
解析DML标签
LanguageDriver langDriver
MappedStatement
Configuration.mappedStatements
variable
<resultMap>
TypeHandler使用图例
reflectorFactory
getMapper
当前节点类型名称
JDBC
Executor
typeHandlerRegistry
new GenericTokenParser(\"#{\
new Configuration
parser.evalLong(\"/employee/birth_date/year\")
UPDATE
mybatis包架构图
new XMLConfigBuilder
xxxMapper.java
false
builder()
Configuration的构建过程
setParameters
CALLABLE
Configuration
MaperMethod的运行原理
SqlSessionFactory构建过程
exceptions
数据处理层
createSqlSource
getTypeHandler
insert
MappedStatement.id
XMLStatementBuilder的DML解析过程
SqlSession.delete
SqlSession
结果映射配置结果映射解析结果数据拷贝
MapperMethod.excute
XPath
XMLMapperBuilder
databaseId
ResultSetType resultSetTypeEnum
LanguageDriver#createParameterHandler
<sql>
mapperElement
propertiesElement
解析到节点
parse
DML解析
parser.parse()
mapping
②
parameterize(Statement statement)
解析DML标签节点
SELECT
useGeneratedKeys属性
PREPARED
数据库
getBoundSql
CallableStatementHandler
SimpleExecutor
XMLScriptBuilder.NodeHandler
SysUserMapper.selectById
builder
Sql
SqlCommand.type
基础支撑层
XObject【代表解析结果】
SqlSource
BoundSql
plugin
③
结果映射
mybatis-config.xml配置文件xxxMapper.xml映射文件
StatementHandler执行图例
TypeHandler.getResult
<typeAliases>
KeyGenerator keyGenerator
doUpdate()
datasource
DML
1
resultType属性
pluginElement
Executor.doUpdate()
org.apache.ibatis.executor.statement.StatementHandler
Executor执行图例
配置加载
MapperProxy.invoke
register
builderAssistant.addMappedStatement(。。。)
连接管理
XMLStatementBuilder
解析mybatis-config.xml全局配置文件解析Mapper.xml文件解析
解析配置
binding
<select/insert/update/delete>
newStatementHandler
ExecutorType.BATCH
MapperProxyFactory
ResultSetHandler
transation
SqlNode
interceptorChain
objectFactory
DynamicContext
newStatementHandler()
SqlSession.update
typeHandlerElement
结果映射Map、基本类型、pojo、list等
getNamedParams
SqlCommandType sqlCommandType
XPathParser
mapperRegistry
new Configuration()
io
XMLScriptBuilder
annonation
<cache>
ParameterMappingTokenHandler
与settings相关属性
SqlCommand
execType
String
好了
[getResultAsType()]
type
Mybatis启动解析过程
搞定
RawSqlSource构建期间即替换动态参数为?,并生成ParameterMapping
<properties>
ExecutorType.REUSE
build()
sql执行
Class<?> parameterTypeClass
org.apache.ibatis.executor.Executor
TypeHandler注册图例
DynamicSource在被调用getBoundSql方法,即Executor执行数据库操作期间对内部维护的节点进行解析,并替换动态参数为?,生成ParameterMapping
org.apache.ibatis.session.Configuration
⑤
statementType属性
query
parseConfiguration(....)
RawSqlSource
cacheEable
SqlSessionFactoryBuilder
reflection
<parameterMap>
TypeHandlerRegistry
environmentsElement
newInstance
<objectFactory>
④
ExecutorType.SIMPLE
reflectorFactoryElement
⑥
Configuration#newParameterHandler
DELETE
BaseStatementHandler.parameterHandler
构造器
MapperRegistry mapperRegistry
<mappers>
new TypeHandlerRegistry(this)
parse()
ReuseExecutor
logging
接口层
new StaticSqlSource
Mapper代理
org.apache.ibatis.session.SqlSessionFactory
sql
cache
MapperProxy
parsing
StatementType statementType
xxxMapper.xml
returnType
prepare()
ms.getStatementType()
解析<include>子标签
configurationElement()
lang属性
<cache-ref>
Configurtion属性
运行机制
update()
XMLConfigBuilder方法
openSession()
MapperProxyFactory的运行原理
databaseIdProviderElement
environment
convertArgsToSqlCommandParam
ParamNameResolver
SqlSession.select
获取配置接口
ParameterHandler
STATEMENT
初始化属性
MapperRegistry
MapperProxy的运行原理
#evalLong(String expression)
日志管理
输入映射Map、基本类型、pojo等
PreparedStatementHandler
MethodInvoker.invoke
executor
数据更新接口
xxxMapper.xml相关配置信息
数据查询接口
getName
BatchExecutor
ParamMap或参数Object
org.apache.ibatis.session.SqlSessionFactoryBuilder
org.apache.ibatis.session.SqlSession
<plugins>
CacheExecutor
id、databaseId、flushCache、useCache、resultOrdered、fetchSize、timeout、parameterMap、resultMap、keyProperty、keyColumn、resultSets属性
openSession
objectWrapperFactoryElement
MethodSignature
XMLMapperBuilder的构建过程
doUpdate
RoutingStatementHandler
数据删除接口
parameterize
ParameterHandler执行图例
①
SqlSource sqlSource
<environments>
SimpleStatementHandler
起来干活了
参数处理
Proxy
<objectWrapperFactory>
XPathParser的evalLong方法
<settings>
参数映射SQL获取SQL解析
settingsAsProperties
build
TypeHandler.setParameter
objectWrapperFactory
objectFactoryElement
Mybatis架构流程图
Class<?> resultTypeClass
SqlSession.insert
0 条评论
下一页