首页 > 数据库 >SqlSessionFactory、SqlSession、Druid之间的关系梳理

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

时间:2023-05-04 11:46:44浏览次数:48  
标签:SqlSessionFactory 对象 数据库 Druid SqlSession Mybatis 连接池

  • 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 在执行数据操作时可以从连接池中获取连接、释放连接,并进行一系列的监控和管理。

标签:SqlSessionFactory,对象,数据库,Druid,SqlSession,Mybatis,连接池
From: https://www.cnblogs.com/jixiegongdi/p/17370680.html

相关文章

  • SqlSessionFactory
    SqlSessionFactory是创建SqlSession的工厂.每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先配置的Configuration实例......
  • 【Mybatis】Idea中设置核心配置文件、映射文件的模板,获取SQLSession工具类
    1.核心配置文件模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>......
  • druid yml 参数配置
    spring: datasource: #druid连接池 type:com.alibaba.druid.pool.DruidDataSource #数据库驱动 driver:com.mysql.jdbc.Driver #最大连接池数量 max-active:20 #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 initial-size:10......
  • SpringBoot之整合Druid数据源
    1.引入依赖<!--jdbc相关的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--druid数据源依赖--><dependency><grou......
  • Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    网上一堆说的,启动类的加@MapperScan,mybatis指定mapper路径,甚至说实体类与数据库连不上等等。都不行,后来比对下与另一个能正常启动的pom文件比对,发现是依赖没加入,包括connector依赖都没有。综上,思路是未连接数据库的原因。......
  • Druid 德鲁伊连接池
    publicvoiddruidTest()throwsException{//创建一个Properties对象读取配置文件Propertiesproperties=newProperties();properties.load(newFileInputStream("src\\druid.properties"));//创建一个指定参数的数据库连接池,Drui......
  • SSM使用Druid数据源出现循环报错
    解决方法在数据库连接配置db.properties文件中的属性前增加前缀xml配置<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="username"value="${jdbc.username}"/>......
  • SpringBoot 使用Druid实现数据库连接池并结合AOP实现多数据源
    SpringBoot是一个快速开发Spring应用程序的框架,而Druid是一个高性能的数据库连接池,可以提高数据库访问的效率。在SpringBoot中使用Druid作为数据库连接池,可以更好地管理和......
  • Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
    #情景今天在搭建springboot+mybatis环境的时候遇到的问题,大概率是版本导致的冲突问题#解决1.第一种解决方案<dependency><groupId>org.springframework.boot</groupI......
  • mybatis里的sqlSessionFactory无法调用Session
    //2、获取SqlSession对象,用它执行sqlSqlSessionsqlSession=sqlSessionFactory.();  我写的时候SqlSessionFactory调用的时候第一个s大写了应该小写的 ......