(三) mybatis 源码之 SqlSession

本文探讨Mybatis中的SqlSession,它是与数据库交互的会话对象,从SqlSessionFactory获取。重点解析Executor执行器,包括其三种类型,并介绍如何通过Interceptor接口扩展Mybatis的功能。同时,文章还介绍了Mybatis如何利用JDK动态代理实现Mapper接口的代理对象,通过MapperProxy进行方法拦截。
摘要由CSDN通过智能技术生成

openSession

SqlSession 用于与数据库进行一次会话, 需要从 SqlSessionFactory 中获取, 查看其 openSession 方法

// 一路调用来到这个方法
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
   
    Transaction tx = null;
    try {
   
        final Environment environment = configuration.getEnvironment();
        // 事务管理
        final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
        tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
        // 创建执行器, 共有三种类型可选
        final Executor executor = configuration.newExecutor(tx, execType);
        // 封装到 SqlSession 对象中
        return new DefaultSqlSession(configuration, executor, autoCommit);
    }
    catch (Exception e) {
   
        closeTransaction(tx); // may have fetched a connection so lets call close()
        throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);
    }
    finally {
   
        ErrorContext.instance().reset();
    }
}

Executor

执行器, 四大对象之一, 有三种可选

public enum ExecutorType {
   
    // 分别对应三种模式 : 普通, 复用, 批量
    SIMPLE, REUSE, BATCH
}

在 Configuration 创建执行器的时候, 会被拦截器拦截, 所以可以实现 Interceptor 接口拓展 mybatis

public Executor 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值