SqlSessionFactory、SqlSession、Druid之间的关系梳理

发布时间 2023-05-04 11:43:48作者: 机械公敌
  • SqlSessionFactory是什么?

SqlSessionFactory 是 Mybatis 的核心接口之一,它是用于创建 SqlSession 对象。

Mybatis 的 SqlSession 对象是负责管理应用程序与数据库之间一组事务的机制,并为应用程序提供访问数据库的方法。SqlSession 是线程不安全的对象,因此应始终使用它的请求/响应范式,并在每个操作后将其关闭,以避免因线程池而导致的污染、数据错误或的其他问题。

SqlSessionFactory 负责管理 Mybatis 的 Configuration 对象的生命周期,这个对象在整个 Mybatis 应用程序生命周期中仅出现一次。

实际上,SqlSessionFactory 负责将 Configuration 对象的信息与连接池和数据源相关联,从而创建 SqlSession 的单个实例。当调用 SqlSession 的 openSession() 方法时,SqlSessionFactory 将返回一个可用于处理事务的 SqlSession。

在应用程序启动时,通常需要创建 SqlSessionFactory 对象,并在运行时将其保留在单例中。这可以为每个请求提供一个 SqlSession 实例,因此应用程序可以管理自己的事务。为此,需要在应用程序中进行依赖注入 (DI)

以下是使用 SqlSessionFactory 的一些基本步骤:

1.创建 SqlSessionFactory

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2.创建 SqlSession

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 这里是执行数据库操作的代码
}

使用 SqlSessionFactory 将可帮助您管理连接池,并为应用程序提供适当的 SQL 访问途径。

 

  • 完整的数据库访问过程

在 Mybatis 中,SqlSession、Configuration 对象以及 Mapper 之间的关系建立了 Mybatis 的整个数据访问流程。简要概述如下:

  1. 首先,通过配置文件(mybatis-config.xml)创建 Configuration 对象。

  2. 然后,通过 Configuration 对象创建 SqlSessionFactory 对象。

  3. 接着,通过 SqlSessionFactory 对象打开 SqlSession,SqlSession 是操作数据库的主要对象。

  4. 最后,通过 SqlSession 获取 Mapper,并且通过 Mapper 操作数据库完成业务逻辑。

具体来说,SqlSession 是对数据库操作的封装,提供了数据操作的一些基本方法,例如增删改查等。

Configuration 对象,则是 Mybatis 最重要的配置对象,它负责读取 Mybatis 配置文 件,并将配置信息转换成 Java 对象,然后供 SqlSession 使用。

Mapper 则是数据持久化操作的接口,它主要是实现数据操作的具体代码。在 Mybatis 中,Mapper 实际上是一个 Java 接口,其中包含了需要进行的数据库操作;而在 Mybatis 的配置文件中,则记录了这个接口实现类(即 XML 映射文件)的位置。

在 Mybatis 中,通过 SqlSessionFactory 产生的 SqlSession 对象,与 Mappers 一起工作,通过不断地解析配置文件和运行 SQL 语句,来实现与数据库之间的数据交互。

因此,SqlSession 通过 Configuration 这个桥梁来读取 Mybatis 的配置文件,并创建、管理 Mappers,完成对数据库的操作。通常,SqlSession 的使用是以打开一个 SqlSession 开始,然后在同一条线程上连续访问多个 Mapper,每个 Mapper 负责执行一组值域相同的操作,最后在关闭 SqlSession 时处理这些操作。

 

  • 结合Druid连接池

在 Mybatis 中,DataSource 是一个非常重要的对象。JDBC标准中的 DataSource 接口负责管理数据库连接,可以轻松地在多个 SqlSession 之间共享数据库连接。在 Mybatis 中,可以使用多种不同的 DataSource 实现来支持数据库连接操作,其中 Druid 是一种著名的 DataSource 的实现方式。

 

Druid 是一个高性能的数据库连接池,在 Java 程序中用于管理数据库连接。Druid 除了提供基本的连接池功能外,还提供了日志监控、SQL 监控、可视化监控、防范 SQL 注入攻击等众多的增强功能。

而 SqlSessionFactory 则是 MyBatis 框架的核心类之一,用于创建 SqlSession 对象,并通过 SqlSession 对象来操作数据库。SqlSessionFactory 是单例模式的,整个应用程序中有且只有一个 SqlSessionFactory 对象。

由于 SqlSessionFactory 是 MyBatis 框架中的核心类,而数据库操作又离不开连接池的管理,因此 Druid 和 SqlSessionFactory 是密不可分的。在 Spring 中,通常使用一个单例的 SqlSessionFactory 对象来管理整个应用程序中的数据库连接,在 SqlSessionFactory 对象被创建时会配置 Druid 数据源相关的属性,从而实现对数据库连接池的管理。

因此,Druid 提供了高性能的数据库连接池,而 SqlSessionFactory 基于连接池管理数据库连接,它们之间的关系是:Druid 为 SqlSessionFactory 提供了数据库连接池的支持,让 MyBatis 在执行数据操作时可以从连接池中获取连接、释放连接,并进行一系列的监控和管理。