mybatis源码流程
2020-04-07 11:37:21 4 举报
mybatis源码流程
作者其他创作
大纲/内容
openSession方法
selectList
SqlSource
成员变量:sql,List<ParameterMapping> parameterMappings
query
// 获取入参类型 String parameterType = context.getStringAttribute(\"parameterType\"); // 别名处理,获取入参对应的Java类型 Class<?> parameterTypeClass = resolveClass(parameterType); // 获取ResultMap String resultMap = context.getStringAttribute(\"resultMap\"); // 获取结果映射类型 String resultType = context.getStringAttribute(\"resultType\");// 设置默认StatementType为Prepared,该参数指定了后面的JDBC处理时,采用哪种Statement StatementType statementType = StatementType.valueOf(context.getStringAttribute(\"statementType\
调用executor的方法进行数据库操作
environmentsElement:数据库环境解析
mapperElement:mapper.xml解析
构造方法
query方法
DefaultSqlSession
3
设置参数
2.处理结果集:resultSetHandler.handleResultSets(ps)
Executor
1.执行sql execute
成员变量:List<ResultMap> resultMaps
prepareStatement方法
创建数据源;创建Executor执行器;创建DefaultSqlSession
BaseExecutor
GenericTokenParser.parse解析#{},获得sql会调用ParameterMappingTokenHandler的handleToken完成处理
实现接口
parameterize方法
MappedStatement
ResultSetHandler
handleResultSets方法
PreparedStatementHandler
SimpleExecutor
创建Configuration
启动项目
解析各个类型的标签,主要关注buildStatementFromContext
实现接口,运用了抽象工厂设计模式
抽象类
getFirstResultSet方法:这里是获取第一个结果集,将传统JDBC的ResultSet包装成一个包含结果列元信息的ResultSetWrapper对象
DefaultResultSetHandler
addMappedStatement方法
RoutingStatementHandler
query方法(继承来自BaseExecutor的)
继承
getBoundSql
1
获取BoundSql
业务查询
获取入参类型
parse方法
设置默认StatementType为Prepared,该参数指定了后面的JDBC处理时,采用哪种Statement
build方法
解析xml标签,最重要的两个是
build方法:创建DefaultSqlSessionFactory
2
设置参数:handler.parameterize(stmt);
BaseStatementHandler
创建SqlSource,解析SQL,封装SQL语句(未参数绑定)和入参信息
DefaultSqlSessionFactory
获取连接
DynamicSqlSource
prepare方法
实现
将解析后的SQL语句还有入参绑定到一起封装到BoundSql对象中
接口
执行解析
MapperBuilderAssistant
XMLConfigBuilder
executor.query
后面还有很多方法对这个结果集进行处理,这里不想写了,有兴趣的朋友可以从这个入口慢慢看
具体的操作方法
实例化Statement
放入Configuration
SqlSessionFactory
创建ParameterMappingTokenHandler
SqlSession
configurationElement
parseStatementNode
queryFromDatabase查询
获取Configuration对象
构建者设计模式
BaseBuilder
CallableStatementHandler
new XPathParser:解析xml成document
判断是否已经加载;从根标签开始解析
成员变量:SqlSource
创建
创建RoutingStatementHandler,用来处理Statement
handleResultSets
创建分词解析器GenericTokenParser
具体操作方法
创建sql信息解析器
输出结果
成员变量:ParameterMap parameterMap
成员变量:statementType
子流程1:设置参数:prepareStatement
getBoundSql方法
抽象类,父类
通过构建者助手,创建MappedStatement对象
instantiateStatement方法
获取入参
SimpleStatementHandler
成员变量:Configuration
实例化Statement:statement = instantiateStatement(connection);
XMLStatementBuilder
获取mapper.xml信息
doquery方法(自己实现的)
buildStatementFromContext
SqlSourceBuilder
BoundSql
SqlSessionFactoryBuilder
返回StaticSqlSource
XMLMapperBuilder
根据StatementType生成对应的Handler
获取结果映射类型
0 条评论
回复 删除
下一页