欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > MyBatis SqlSessionFactoryBuilder 的作用是什么?

MyBatis SqlSessionFactoryBuilder 的作用是什么?

2025/3/17 12:46:54 来源:https://blog.csdn.net/nmsoftklb/article/details/146207505  浏览:    关键词:MyBatis SqlSessionFactoryBuilder 的作用是什么?

SqlSessionFactoryBuilder 在 MyBatis 中扮演着至关重要的角色,它的主要作用是构建 (Build) SqlSessionFactory 实例。 你可以将 SqlSessionFactoryBuilder 理解为 SqlSessionFactory 的工厂的建造者

核心作用概括:

SqlSessionFactoryBuilder 的核心作用就是 抽象了 SqlSessionFactory 的创建过程,并提供了灵活、便捷的方式来从不同的配置源 (XML 配置文件、Java 代码配置) 构建 SqlSessionFactory 实例。

更详细的解释和作用分解:

  1. 抽象 SqlSessionFactory 的构建过程:

    • SqlSessionFactory 的创建并非一个简单的实例化过程,它涉及到加载和解析 MyBatis 的配置信息、初始化各种 MyBatis 组件 (例如数据源、事务管理器、Mapper 注册器等)、并将这些组件组装起来,最终才能得到一个可用的 SqlSessionFactory 实例。
    • SqlSessionFactoryBuilder 将这个复杂的构建过程封装起来,对外提供简洁的 build() 方法,隐藏了内部的构建细节。 开发者只需要调用 SqlSessionFactoryBuilder.build() 方法,传入配置信息,就可以获得 SqlSessionFactory 实例,无需关心底层的构建细节。
  2. 支持多种配置源 (Configuration Source):

    SqlSessionFactoryBuilder 提供了多个重载的 build() 方法,可以接受不同类型的配置源,从而支持从多种方式加载 MyBatis 配置:

    • 从 XML 配置文件 (InputStream): 这是最常用的方式,通过 build(InputStream inputStream) 方法,传入指向 MyBatis XML 配置文件的 InputStreamSqlSessionFactoryBuilder 会解析 XML 文件并构建 SqlSessionFactory
    • Configuration 对象 (Configuration): 通过 build(Configuration config) 方法,可以直接传入一个已经构建好的 Configuration 对象。 这种方式适用于使用 Java 代码配置 MyBatis 的场景。
    • Reader 对象 (Reader): 类似于 InputStream,但使用 Reader 读取字符流,适用于从字符流读取 XML 配置的情况。
    • XMLMapperBuilder 对象 (XMLMapperBuilder): 更底层的构建方式,通常不直接使用,用于更精细的配置解析控制。

    这种多配置源的支持,使得 MyBatis 的配置方式更加灵活,可以适应不同的应用场景和配置管理需求。

  3. 作为 SqlSessionFactory 的建造者 (Builder Pattern):

    SqlSessionFactoryBuilder 遵循了 建造者模式 (Builder Pattern) 设计模式。 建造者模式的核心思想是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

    在 MyBatis 中:

    • 建造者 (Builder): SqlSessionFactoryBuilder 类。
    • 产品 (Product): SqlSessionFactory 接口及其实现类 (通常是 DefaultSqlSessionFactory)。
    • 导演 (Director - 隐含): SqlSessionFactoryBuilder.build() 方法及其内部的解析和构建逻辑,它控制着 SqlSessionFactory 的构建步骤。
    • 具体建造者 (Concrete Builder - 隐含): XMLConfigBuilder 等类,负责解析 XML 配置并填充 Configuration 对象,可以看作是 SqlSessionFactoryBuilder 构建过程中的具体步骤的实现。

    通过建造者模式,SqlSessionFactoryBuilder 使得 SqlSessionFactory 的创建过程更加清晰、可维护、可扩展。 也使得配置加载和 SqlSessionFactory 的创建逻辑解耦,提高了代码的灵活性。

  4. 一次性使用,生命周期短暂:

    SqlSessionFactoryBuilder 的设计意图是 一次性使用 (One-time use) 的。 它的生命周期很短暂,主要用于构建 SqlSessionFactory 实例。 一旦 SqlSessionFactory 被成功构建,SqlSessionFactoryBuilder 就完成了它的使命,可以被丢弃,不再需要长期持有。

    通常,在 MyBatis 应用的启动阶段,你会使用 SqlSessionFactoryBuilder 构建 SqlSessionFactory,然后将 SqlSessionFactory 对象缓存起来 (例如作为单例 Spring Bean 管理),供整个应用生命周期使用。 你不会在每次需要 SqlSession 时都去创建 SqlSessionFactoryBuilder

  5. 核心方法:build() 方法:

    SqlSessionFactoryBuilder 的核心方法是 build() 方法。 所有重载的 build() 方法最终都会返回一个 SqlSessionFactory 实例。 build() 方法内部会完成以下主要工作:

    • 解析配置源: 根据传入的配置源 (例如 InputStream),解析 MyBatis 配置信息。 如果是 XML 配置,会使用 XMLConfigBuilder 进行解析。
    • 构建 Configuration 对象: 将解析得到的配置信息构建成一个 Configuration 对象。 Configuration 对象包含了 MyBatis 的所有配置 (数据源、事务管理器、Mapper 映射、全局设置等)。
    • 创建 SqlSessionFactory 实例: 使用构建好的 Configuration 对象,创建 SqlSessionFactory 实例 (通常是 DefaultSqlSessionFactory 实例)。
    • 返回 SqlSessionFactory 实例: 将创建好的 SqlSessionFactory 实例返回给调用者。

总结 SqlSessionFactoryBuilder 的作用:

  • 构建 SqlSessionFactory 实例: 这是 SqlSessionFactoryBuilder 的核心和唯一目的。
  • 抽象 SqlSessionFactory 的复杂创建过程: 简化 SqlSessionFactory 的创建流程,隐藏内部细节。
  • 支持多种配置源: 允许从 XML 配置文件、Java 代码配置等多种方式加载 MyBatis 配置。
  • 遵循建造者模式: 使得 SqlSessionFactory 的构建过程更加清晰、灵活、可扩展。
  • 一次性使用,生命周期短暂: 主要用于构建 SqlSessionFactory,构建完成后即可丢弃。
  • 提供 build() 方法作为入口: 通过 build() 方法对外提供简洁的 SqlSessionFactory 构建 API。

简单比喻:

你可以将 SqlSessionFactoryBuilder 比喻成一个 组装工厂的工程师。 工程师 (SqlSessionFactoryBuilder) 负责根据设计图纸 (MyBatis 配置) 和原材料 (配置源),一步步地组装出最终的工厂 ( SqlSessionFactory )。 一旦工厂组装完成,工程师的任务就完成了,他就可以离开了 (一次性使用)。 而组装好的工厂 (SqlSessionFactory) 就可以开始源源不断地生产产品 ( SqlSession ) 了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词