Mybatis之SqlSessionFactory详解

大家好,我是升仔

引言

在Mybatis中,SqlSessionFactory 是一个极其核心的组件,它负责创建 SqlSession,后者是进行数据库操作的主要接口。本文将深入探讨 SqlSessionFactory 的原理和应用。

SqlSessionFactory 概述

SqlSessionFactory 是Mybatis的一个接口,它的实现类负责创建 SqlSession 的实例。在Mybatis配置文件中定义了数据源(DataSource)、事务管理器(TransactionManager)等信息,这些信息被用来创建 SqlSessionFactory

创建SqlSessionFactory

创建 SqlSessionFactory 的一般步骤是:

  1. 读取Mybatis配置文件
    使用 Resources 工具类读取Mybatis配置文件。
  2. 构建SqlSessionFactoryBuilder
    创建 SqlSessionFactoryBuilder 实例。
  3. 创建SqlSessionFactory
    通过 SqlSessionFactoryBuilder 读取配置信息创建 SqlSessionFactory
示例代码
javaCopy codeString resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

在这段代码中,首先读取Mybatis的配置文件,然后通过 SqlSessionFactoryBuilder 创建出 SqlSessionFactory 的实例。

SqlSessionFactory的源码分析

SqlSessionFactoryBuilderbuild() 方法中进行了核心的处理工作,它解析配置文件,创建 SqlSessionFactory 实例。

重要代码片段
javaCopy codepublic SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    try {
        XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
        return build(parser.parse());
    } catch (Exception e) {
        throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
        ErrorContext.instance().reset();
        try {
            reader.close();
        } catch (IOException e) {
            // 忽略关闭时的异常
        }
    }
}

在这个方法中,XMLConfigBuilder 负责解析配置文件,并将解析结果封装成 Configuration 对象,最后使用这个 Configuration 对象创建 SqlSessionFactory

实际应用场景

在实际开发中,通常会在应用初始化时创建一个 SqlSessionFactory 实例,并在整个应用中共享。

应用场景一:Spring集成Mybatis

在Spring应用中,Spring容器负责管理 SqlSessionFactory

Spring配置示例
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>
应用场景二:Web应用

在Web应用中,可以在 ServletContextListener 中初始化 SqlSessionFactory,并存储在 ServletContext 以供全局使用。

ServletContextListener实现
public class MyAppContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        sce.getServletContext().setAttribute("SqlSessionFactory", sqlSessionFactory);
    }

    public void contextDestroyed(ServletContextEvent sce) {
        // 清理资源
    }
}
最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

相关推荐

  1. MybatisSqlSessionFactory详解

    2024-01-27 11:14:01       42 阅读
  2. MybatisSqlSession详解

    2024-01-27 11:14:01       36 阅读
  3. MyBatis详解

    2024-01-27 11:14:01       24 阅读
  4. MyBatis 三:配置文件详解和 Mapper 接口方式

    2024-01-27 11:14:01       18 阅读
  5. Mybatis使用详解

    2024-01-27 11:14:01       38 阅读
  6. MyBatis配置文件详解

    2024-01-27 11:14:01       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 11:14:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 11:14:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 11:14:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 11:14:01       18 阅读

热门阅读

  1. 如何创建线程

    2024-01-27 11:14:01       27 阅读
  2. [GN] Vue3.2 快速上手 ---- 组件通信

    2024-01-27 11:14:01       34 阅读
  3. CF1029E Tree with Small Distances 题解

    2024-01-27 11:14:01       36 阅读
  4. TiDB中Table映射到KV

    2024-01-27 11:14:01       30 阅读
  5. nginx做盗链与防盗链配置

    2024-01-27 11:14:01       25 阅读
  6. 常用的gpt-4 prompt words收集8

    2024-01-27 11:14:01       25 阅读
  7. php 源码加密保护 bease方案

    2024-01-27 11:14:01       25 阅读
  8. android studio开发的一些问题

    2024-01-27 11:14:01       33 阅读