Mybatis详细的执行流程

在这里插入图片描述

  1. 将Mybatis核心配置文件加载至内存中
String resource="mybatis-config.xml";
//将mybatis核心配置文件加载到内存中
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
//实例化一个SqlSessionFactoryBuilder构造器并调用build方法
new SqlSessionFactoryBuilder().build(resourceAsStream);
//-------------------------------------------------------------------------
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    
    
        SqlSessionFactory var5;
        try {
    
    
        //XMLConfigBuilder解析文件流
            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;
    }
//------------------------------------------------------------------
//把配置信息放入Configuration对象中,并且创建DefaultSqlSessionFactory对象
public SqlSessionFactory build(Configuration config) {
    
    
        return new DefaultSqlSessionFactory(config);
    }

//------------------------------------------------------------------
//调用openSession方法调用openSessionFromDataSource方法
public SqlSession openSession() {
    
    
        return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
    }

//------------------------------------------------------------------
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    
    
        Transaction tx = null;

        DefaultSqlSession var8;
        try {
    
    
            Environment environment = this.configuration.getEnvironment();
            //由TransactionFactory 创建一个Transaction 事务对象
            TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);
            tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
            //创建执行器Executor 
            Executor executor = this.configuration.newExecutor(tx, execType);
            var8 = new DefaultSqlSession(this.configuration, executor, autoCommit);
        } catch (Exception var12) {
    
    
            this.closeTransaction(tx);
            throw ExceptionFactory.wrapException("Error opening session.  Cause: " + var12, var12);
        } finally {
    
    
            ErrorContext.instance().reset();
        }

        return var8;
    }

//------------------------------------------------------
//获取mapper对象进行CRUD操作
public <T> T getMapper(Class<T> type) {
    
    
        return this.configuration.getMapper(type, this);
    }
//设置自动提交为false
private final boolean autoCommit;

//---------------------------------------
//关闭流
   public void close() {
    
    
        try {
    
    
            this.executor.close(this.isCommitOrRollbackRequired(false));
            this.closeCursors();
            this.dirty = false;
        } finally {
    
    
            ErrorContext.instance().reset();
        }

    }



猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/113687118