首页 > 其他分享 >Mybatis执行流程详细剖析

Mybatis执行流程详细剖析

时间:2022-12-01 11:33:07浏览次数:37  
标签:SqlSessionFactory return 流程 inputStream 剖析 build reader Mybatis public

流程图

Mybatis执行流程剖析

第二步 实例化SqlSessionFactoryBuilder -> 实例化SqlSessionFactory

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.apache.ibatis.session;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.exceptions.ExceptionFactory;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;

public class SqlSessionFactoryBuilder {
    public SqlSessionFactoryBuilder() {
    }

    public SqlSessionFactory build(Reader reader) {
        return this.build((Reader)reader, (String)null, (Properties)null);
    }

    public SqlSessionFactory build(Reader reader, String environment) {
        return this.build((Reader)reader, environment, (Properties)null);
    }

    public SqlSessionFactory build(Reader reader, Properties properties) {
        return this.build((Reader)reader, (String)null, properties);
    }

    public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                reader.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }

    public SqlSessionFactory build(InputStream inputStream) {
        return this.build((InputStream)inputStream, (String)null, (Properties)null);
    }

    public SqlSessionFactory build(InputStream inputStream, String environment) {
        return this.build((InputStream)inputStream, environment, (Properties)null);
    }

    public SqlSessionFactory build(InputStream inputStream, Properties properties) {
        return this.build((InputStream)inputStream, (String)null, properties);
    }

    public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                inputStream.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }

    public SqlSessionFactory build(Configuration config) {
        return new DefaultSqlSessionFactory(config);
    }
}

通过Debug 解析完的在configuration 中

configuration

有个事务管理器后创建了一个executor 执行器

executor

通过反射,创建SQLSession 执行mapper

mapper

标签:SqlSessionFactory,return,流程,inputStream,剖析,build,reader,Mybatis,public
From: https://www.cnblogs.com/depressiom/p/16940905.html

相关文章

  • 最新版 苹果 IOS AppStore证书申请全流程 包括p12文件
     第一步登陆开发者网站并进入证书管理页。辅助工具网站地址:http://www.applicationloader.net/第二步添加【Certificates】证书。在这里插入图片描述......
  • iOS创建苹果证书、制作p12证书流程
     一、创建Certificates1、在苹果开发者后台点击右上角【Account】进入以下界面,然后点击【Certificates,Identifiers&Profiles】2、进入以下界面后点击【Create......
  • SpringBoot启动流程
    run方法启动时传入了当前类ContractApplication.class,传入当前类的作用主要是为了解析当前类上面的注解(不一定传递当前类,也可以自己写一个类,在写的类上添加对应的注解)......
  • 流程图(Mermaid)
    graphLRemperor((朱八八))-.子.->朱五四-.子.->朱四九-.子.->朱百六朱雄英--长子-->朱标--长子-->emperoremperor2((朱允炆))--次子-->朱标朱樉--次子-->emperor朱......
  • 生产环境核心数据库切换流程
    1.整体原则按现有架构搭建一套全新的SQL群集,将现有的业务数据库迁移到新设备1、使用单台共享存储架构,不考虑使用alwayson的数据库架构,继续使用SQL群集架构2、尽量减......
  • iOS 生成证书、描述文件、打包上架Appstore详细流程
    简介我打算将生成证书,描述文件、上架App的步骤一步一步写下来,于是就有了这篇文章编译环境系统版本:macOSSierra10.12.6​​Xcode​​:v9.2(9C40b)1.开发者账号​​苹果官......
  • 快速绘制流程图「GitHub 热点速览 v.22.47」
    画流程图一直是研发的一个难题,如何画得通俗易懂已经够让人头疼了,还要美观大方。用d2的语法描述下流程,d2会自动帮你生成一张配色极佳的流程图。说到研发的选择,本周特推......
  • MyBatis条件查询
    多条件查询select*fromUser<where><if"name!=nullandname!=''">andnamelike#{name}<if><if"age!=nullandag......
  • 没用好mybatisplus的Wrapper,我真难为情啊
    背景我们的springboot应用程序的持久层,是用jeecgboot框架生成的代码。mybatisplus版本是3.1.2。 在一次对当前程序的sql性能优化时,我重写了BaseMapper的selectPage方法......
  • 记一次由mybatis的判空类型的错误
    差不多是这种形状的异常:###Errorqueryingdatabase. Cause:java.lang.IllegalArgumentException:invalidcomparison:java.util.Dateandjava.lang.String###Cau......