SqlSessionFactory、SqlSession、Druid之间的关系梳理
- 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 的整个数据访问流程。简要概述如下:
-
首先,通过配置文件(mybatis-config.xml)创建 Configuration 对象。
-
然后,通过 Configuration 对象创建 SqlSessionFactory 对象。
-
接着,通过 SqlSessionFactory 对象打开 SqlSession,SqlSession 是操作数据库的主要对象。
-
最后,通过 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 在执行数据操作时可以从连接池中获取连接、释放连接,并进行一系列的监控和管理。