Mybatis之SessionFactory原理

本文详细解析了Mybatis的初始化过程,重点介绍了SqlSessionFactory的创建、SqlSession的原理,以及Configuration对象和Mybatis的生命周期。SqlSessionFactoryBuilder通过XMLConfigBuilder解析配置文件生成Configuration,进而创建SqlSessionFactory。SqlSession作为执行SQL的主要接口,内部包含Execute、StatementHandler、ParameterHandler和ResultHandler四大对象。Configuration对象存储所有Mybatis配置信息,贯穿整个Mybatis生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Mybatis在使用前需进行初始化,下面就针对Mybatis的初始化过程进行介绍。Mybatis的初始化过程有两种:基于XML和基于Java API两种方式,下面就针对基于XML的方式进行展开。

一、Mybatis初始化的基本过程

Mybatis的初始化过程如下图所示:

mybatis_begin

  1. 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;
  2. SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象 ;
  3. SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法;
  4. XMLConfigBuilder 对象返回 Configuration 对象;
  5. SqlSessionFactoryBuilder 根据 Configuration 对象创建一个DefaultSessionFactory 对象;
  6. SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给 Client ,供 Client使用。

上面涉及到的对象有:

  • SqlSessionFactoryBuilder :SqlSessionFactory的构造器,用于创建SqlSessionFactory,采用了Builder设计模式

  • Configuration :该对象是mybatis-config.xml文件中所有mybatis配置信息

  • SqlSessionFactory:SqlSession工厂类,以工厂形式创建SqlSession对象,采用了Factory工厂设计模式

  • XmlConfigParser :负责将mybatis-config.xml配置文件解析成Configuration对象,供SqlSessonFactoryBuilder使用,创建SqlSessionFactory

下面针对这些对象进行展开。

二、SqlSessionFactory的创建

SqlSessionFactory是MyBatis中的一个主要接口,其主要负责MyBatis框架初始化操作及提供SqlSession对象。

public interface SqlSessionFactory {
   

  SqlSession openSession();

  SqlSession openSession(boolean autoCommit);
  SqlSession openSession(Connection connection);
  SqlSession openSession(TransactionIsolationLevel level);

  SqlSession openSession(ExecutorType execType);
  SqlSession openSession(ExecutorType execType, boolean autoCommit);
  SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
  SqlSession openSession(ExecutorType execType, Connection connection);

  Configuration getConfiguration();

}

它有两个实现类:DefaultSqlSessionFactorySqlSessionManager,其中SqlSessionManager已被废弃。在Mybtis初始化的过程中首先会读取Mybatis的核心配置文件,一般创建SqlSessionFactory的代码如下:

InputStream is = Resources
### MyBatis 工作原理 MyBatis 是一款轻量级的 ORM 框架,其核心工作原理围绕着配置解析、SQL 映射以及数据库交互展开。以下是对其框架执行流程和 SQL 映射机制的具体分析。 #### 1. 配置解析阶段 当 MyBatis 启动时,会加载并解析两个主要类型的配置文件:全局配置文件 `mybatis-config.xml` 和映射器配置文件(通常是 XML 文件或者注解形式)。 - **全局配置文件**定义了 MyBatis 的运行环境及相关参数,例如数据库连接池设置、事务管理策略等[^2]。这些信息被解析后封装到一个名为 `Configuration` 的对象中。 - **映射器配置文件**则描述了具体的 SQL 语句及其对应的输入输出参数。每条 SQL 被解析为一个 `MappedStatement` 对象,并存入内存以便后续调用[^4]。 #### 2. 数据库操作阶段 为了与数据库进行交互,MyBatis 提供了一个关键组件——`SqlSession`。该对象充当应用程序与数据库之间的桥梁,负责执行 CRUD 操作、管理事务以及获取 Mapper 接口实例。要创建 `SqlSession` 实例,则需依赖于 `SqlSessionFactory`。 #### 3. SQL 执行过程 一旦获得了 `SqlSession`,就可以通过它来触发实际的查询或更新动作。具体来说: - 当用户发起请求时,MyBatis 根据传入的方法名定位相应的 `MappedStatement` 对象; - 基于此对象中的元数据(如 SQL 文本模板),结合传递的实际参数值,构建完整的 SQL 语句; - 此外,还支持动态 SQL 功能,允许根据条件拼接不同的片段以适应复杂的业务需求[^1]; - 构建完成后的 SQL 将进一步转换成标准 JDBC API 中的 `PreparedStatement` 或者 `Statement` 形式交给底层驱动程序处理[^3]; #### 4. 结果集映射返回 对于 SELECT 类型的操作而言,在收到数据库反馈的数据之后,还需要经历一个重要环节即结果集映射。这一步骤依据预先设定好的规则将原始记录转化为目标 POJO (Plain Old Java Object),从而便于上层逻辑直接消费使用。 ```java // 创建 SqlSessionFactoryBuilder 并初始化 SessionFactory InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try(SqlSession session = sqlSessionFactory.openSession()) { Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } ``` 以上代码展示了如何利用 MyBatis 完成一次基本的对象读取任务。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值