三、MyBatis学习之执行流程解析

配置文件解析 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值