配置文件解析 configuration
配置文件的解析流程即是将XML描述元素转换成对应的JAVA对像过程,其最终转换对像及其关系如下图:
配置元素解析构建器
>org.apache.ibatis.builder.xml.XMLConfigBuilder
>org.apache.ibatis.builder.xml.XMLMapperBuilder
>org.apache.ibatis.builder.xml.XMLStatementBuilder
>org.apache.ibatis.builder.SqlSourceBuilder
>org.apache.ibatis.scripting.xmltags.XMLScriptBuilder
>org.apache.ibatis.builder.annotation.MapperAnnotationBuilder
sql statement 构建流程源码:
>org.apache.ibatis.session.SqlSessionFactoryBuilder#build()
1.Config.xml 文件解析
>org.apache.ibatis.builder.xml.XMLConfigBuilder#parse()
>org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration()
>org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement()
2.Mapper.xml 文件解析
>org.apache.ibatis.builder.xml.XMLMapperBuilder#parse()
>org.apache.ibatis.builder.xml.XMLMapperBuilder#configurationElement()
>org.apache.ibatis.builder.xml.XMLMapperBuilder#buildStatementFromContext()
3.Statemen sql块解析
>org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode
>org.apache.ibatis.builder.MapperBuilderAssistant#addMappedStatement()
4.动态SQL脚本解析
>org.apache.ibatis.scripting.xmltags.XMLLanguageDriver#createSqlSource()
>org.apache.ibatis.scripting.xmltags.XMLScriptBuilder#parseScriptNode()
>org.apache.ibatis.scripting.xmltags.XMLScriptBuilder#parseDynamicTags()
会话创建 SqlSession
首先我们还是先来了解一下会话对像的组成结构如下图:
会话构建源码解析
>org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSession(boolean)
>org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
>org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory#newTransaction()
>org.apache.ibatis.session.Configuration#newExecutor()
>org.apache.ibatis.executor.SimpleExecutor#SimpleExecutor
>org.apache.ibatis.executor.CachingExecutor#CachingExecutor
//执行器插件包装
>org.apache.ibatis.plugin.InterceptorChain#pluginAll(executor)
>org.apache.ibatis.session.defaults.DefaultSqlSession#DefaultSqlSession()
方法执行 StatementHandler
StatementHandler 源码解析
创建StatementHandler:
>org.apache.ibatis.session.defaults.DefaultSqlSession#selectList()
>org.apache.ibatis.executor.CachingExecutor#query()
>org.apache.ibatis.executor.BaseExecutor#query()
>org.apache.ibatis.executor.BaseExecutor#queryFromDatabase
>org.apache.ibatis.executor.SimpleExecutor#doQuery
>org.apache.ibatis.session.Configuration#newStatementHandler
>org.apache.ibatis.executor.statement.BaseStatementHandler#BaseStatementHandler
>org.apache.ibatis.session.Configuration#newParameterHandler
>org.apache.ibatis.plugin.InterceptorChain#pluginAll(parameterHandler)
>org.apache.ibatis.session.Configuration#newResultSetHandler
>org.apache.ibatis.plugin.InterceptorChain#pluginAll(resultSetHandler)
>org.apache.ibatis.plugin.InterceptorChain#pluginAll(statementHandler)
使用StatementHandler
>org.apache.ibatis.executor.SimpleExecutor#doQuery
>org.apache.ibatis.executor.SimpleExecutor#prepareStatement
>org.apache.ibatis.executor.statement.BaseStatementHandler#prepare
>org.apache.ibatis.executor.statement.PreparedStatementHandler#instantiateStatement
>org.apache.ibatis.executor.statement.PreparedStatementHandler#parameterize
>org.apache.ibatis.scripting.defaults.DefaultParameterHandler#setParameters