mybatis四大神器之Executor执行器

2020-07-25  本文已影响0人  ajajaj

上篇文章介绍了mybatis中的关键对象SqlSessionFactory的创建过程,本篇文章继续介绍下执行器executor。每个SqlSession都会拥有一个Executor对象,这个对象负责增删改查操作,我们可以简单的将它理解为JDBC中Statement的封装版

executor继承结构

image

Executor的创建

在SqlSessionFactory创建完成后,调用openSession方法:

    public SqlSession openSession() {
        return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
    }

在SqlSessionFactory的默认实现类DefaultSqlSessionFactory可以看到openSession中调用了openSessionFromDataSource,在这个方法中会创建一个执行器,代码如下

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

        DefaultSqlSession var8;
        try {
            Environment environment = this.configuration.getEnvironment();
            TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);
            tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
            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;
    }

执行器对象是由Coniguration对象负责创建的.Configuration对象会根据得到ExecutorType创建对应的Excecutor对象,并把这个Excecutor对象传给SqlSession对象

ExcecutorType的选择

ExecutorType来决定Configuration对象创建何种类型的执行器.它的赋值可以通过两个地方进行赋值.

首先.可以通过<settings>标签来设置当前工程中所有SqlSession对象使用的默认Executour

image

也可以通过SqlSessoinFactory中openSession方法来指定具体的SqlSession使用的执行器

image

原文地址

http://cbaj.gitee.io/blog/2020/07/25/mybatis%E5%9B%9B%E5%A4%A7%E7%A5%9E%E5%99%A8%E4%B9%8BExecutor%E6%89%A7%E8%A1%8C%E5%99%A8/#more

上一篇 下一篇

猜你喜欢

热点阅读