zoukankan      html  css  js  c++  java
  • MyBatis的执行流程

    1、解析配置文件,生成Configuration对象

    解析配置文件后,转化为Configuration对象如下图所示:

    构建过程

    >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

    2、构建sqlStatment

    >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()

    3、创建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()

    4、方法执行StatmentHandler

    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.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)

    >org.apache.ibatis.executor.BaseExecutor#getConnection

    >org.apache.ibatis.executor.statement.PreparedStatementHandler#instantiateStatement

    >org.apache.ibatis.executor.statement.PreparedStatementHandler#parameterize

    >org.apache.ibatis.scripting.defaults.DefaultParameterHandler#setParameters

    org.apache.ibatis.type.BaseTypeHandler#setParameter

    org.apache.ibatis.type.UnknownTypeHandler#setNonNullParameter

    org.apache.ibatis.type.IntegerTypeHandler#setNonNullParameter

    5、执行查询

  • 相关阅读:
    VMware安装最新版CentOS7图文教程
    git 本地给远程仓库创建分支 三步法
    git如何利用分支进行多人开发
    题解 洛谷P6478 [NOI Online #2 提高组] 游戏
    题解 CF1146D Frog Jumping
    题解 洛谷P6477 [NOI Online #2 提高组] 子序列问题
    题解 LOJ2472 「九省联考 2018」IIIDX
    题解 CF1340 A,B,C Codeforces Round #637 (Div. 1)
    题解 LOJ3284 「USACO 2020 US Open Platinum」Exercise
    windows上的路由表
  • 原文地址:https://www.cnblogs.com/zcr-xiaozhai/p/14037182.html
Copyright © 2011-2022 走看看