详解MyBatis的SqlSession获取流程

本文详细探讨了MyBatis中SqlSession的获取流程,从解析配置文件到创建SqlSessionFactory,再到通过DefaultSqlSessionFactory的openSession()方法获取SqlSession。在此过程中,涉及Environment、事务工厂、数据源、Executor的构建,以及可能的二级缓存和插件配置。通过这个流程,理解了如何从配置文件到实际执行SQL的整个过程。
摘要由CSDN通过智能技术生成

前言

已知在MyBatis的使用中,使用MyBatis时会先读取配置文件mybatis-config.xml为字符流或者字节流,然后通过SqlSessionFactoryBuilder基于配置文件的字符流或字节流来构建SqlSessionFactory,然后再通过SqlSessionFactoryopenSession() 方法获取SqlSession,示例代码如下所示。

public static void main(String[] args) throws Exception {
    String resource = "mybatis-config.xml";
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
            .build(Resources.getResourceAsStream(resource));
    SqlSession sqlSession = sqlSessionFactory.openSession();
}
复制代码

上述示例代码中的SqlSessionFactory实际为DefaultSqlSessionFactory,本篇文章将对DefaultSqlSessionFactory获取SqlSession的流程进行学习。

正文

DefaultSqlSessionFactoryopenSession() 方法如下所示。

public SqlSession openSession() {
    return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
}
复制代码

继续看openSessionFromDataSource() 方法的实现,如下所示。

private SqlSession openSessionFromDataSource(ExecutorType execType, 
                                             TransactionIsolationLevel level, 
                                             boolean autoCommit) {
    Transaction tx = null;
    try {
        // Environment中包含有事务工厂和数据源
        final Environment environment = configuration.getEnvironment();
        // 获取事务工厂
        // 如果配置了JDBC事务,则获取JDBC事务工厂,否则获取MANAGED事务工厂
        final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
        // 创建事务
        tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值