当前位置: 首页 > news >正文

配置加载与初始化

MyBatis配置加载:架构、解析流程与核心类解析

在MyBatis框架中,配置加载是整个框架初始化的第一步,负责加载并解析MyBatis的配置文件,进而初始化所有的配置信息。这一过程确保了系统能够正确初始化并启动。

1. 配置加载的作用与重要性

配置加载是MyBatis框架初始化的核心步骤,负责加载并解析MyBatis的配置文件(通常是mybatis-config.xml),进而初始化所有配置信息。配置文件的作用是定义全局配置,如数据库连接、映射文件路径、插件、日志等。配置加载过程包括:

  • 数据库连接池的初始化。
  • SQL映射的加载。
  • 类型处理器、缓存等组件的配置。

2. 配置加载的核心类——SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是MyBatis配置加载的入口类,负责根据mybatis-config.xml文件创建SqlSessionFactorySqlSessionFactory是MyBatis执行SQL的核心对象。

核心流程

  1. 解析XML配置文件SqlSessionFactoryBuilder使用XMLConfigBuilder解析XML文件。
  2. 构建Configuration对象:解析后的配置信息被封装到Configuration对象中。
  3. 创建SqlSessionFactory:最终通过Configuration对象创建SqlSessionFactory

示例代码

java复制

public class SqlSessionFactoryBuilder { public SqlSessionFactory build(InputStream inputStream) { XMLConfigBuilder parser = new XMLConfigBuilder(inputStream); Configuration configuration = parser.parse(); return new DefaultSqlSessionFactory(configuration); } }

3.XMLConfigBuilder解析配置文件

XMLConfigBuilder是MyBatis的配置解析器,负责将XML配置文件解析为Configuration对象。解析过程通过DOM解析器进行。

核心方法

  • document.getRootElement():获取XML文档的根元素(通常是<configuration>节点)。
  • parseConfiguration():将配置文件中的各个节点(如<settings><properties><mappers>等)逐一解析并加载到Configuration对象中。

4.Configuration类的初始化

Configuration类是MyBatis的核心配置类,保存着MyBatis的所有配置信息。它包含了数据库连接信息、映射器信息、插件、类型处理器等。

初始化过程

  • 读取数据库连接池信息:加载<environment><dataSource>节点。
  • 初始化类型处理器:加载<typeHandlers>节点。
  • 配置插件:加载<plugins>节点。
  • 加载映射器:加载<mappers>节点。

示例代码

java复制

public class Configuration { private DataSource dataSource; private TypeHandlerRegistry typeHandlerRegistry; private PluginRegistry pluginRegistry; private List<MappedStatement> mappedStatements; public void addMapper(String resource) { // 加载Mapper文件 loadMapper(resource); } private void loadMapper(String resource) { InputStream inputStream = Resources.getResourceAsStream(resource); XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, this, resource); mapperParser.parse(); } }

5. 解析数据库连接配置

mybatis-config.xml配置文件中,数据库连接信息通常通过<environment><dataSource>节点进行配置。XMLConfigBuilder会读取这些信息,并将其转化为相应的DataSource对象。

数据源类型

  • POOLED:使用连接池。
  • UNPOOLED:不使用连接池。

示例代码

java复制

public void parseConfiguration(XNode root) throws Exception { XNode environmentsNode = root.evalNode("environments"); if (environmentsNode != null) { for (XNode environmentNode : environmentsNode.getChildren()) { String type = environmentNode.getStringAttribute("type"); DataSource dataSource = createDataSource(type); configuration.setDataSource(dataSource); } } }

6. 解析类型处理器和插件配置

MyBatis支持自定义类型处理器和插件,它们的配置通常在<typeHandlers><plugins>节点下。

核心代码

java复制

public void parseConfiguration(XNode root) throws Exception { // 解析<TypeHandlers>节点,注册自定义类型处理器 XNode typeHandlersNode = root.evalNode("typeHandlers"); if (typeHandlersNode != null) { for (XNode typeHandlerNode : typeHandlersNode.getChildren()) { String handler = typeHandlerNode.getStringAttribute("handler"); configuration.getTypeHandlerRegistry().register(handler); } } // 解析<Plugins>节点,注册插件 XNode pluginsNode = root.evalNode("plugins"); if (pluginsNode != null) { for (XNode pluginNode : pluginsNode.getChildren()) { String interceptor = pluginNode.getStringAttribute("interceptor"); configuration.addInterceptor(interceptor); } } }

核心方法

  • getTypeHandlerRegistry():将自定义类型处理器注册到Configuration中。
  • addInterceptor():将插件注册到Configuration中。

7. Mapper文件的加载与解析

Mapper文件通常用于定义具体的SQL语句,在mybatis-config.xml中的<mappers>节点下配置。XMLConfigBuilder会根据这些配置加载Mapper文件并注册。

示例配置

xml复制

<configuration> <mappers> <mapper resource="com/example/UserMapper.xml"/> </mappers> </configuration>

核心代码

java复制

public void parseConfiguration(XNode root) throws Exception { XNode mappersNode = root.evalNode("mappers"); if (mappersNode != null) { for (XNode mapperNode : mappersNode.getChildren()) { String resource = mapperNode.getStringAttribute("resource"); // 加载Mapper文件 loadMapper(resource); } } } private void loadMapper(String resource) { InputStream inputStream = Resources.getResourceAsStream(resource); XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource); mapperParser.parse(); }

XMLMapperBuilder的作用

XMLMapperBuilder负责解析具体的Mapper.xml文件,将SQL语句解析并映射到MappedStatement对象中。

http://www.jsqmd.com/news/318298/

相关文章:

  • 2026年1月成型机厂家最新推荐:水渠/渠道/沟渠/成型机/水沟一次成型机/农田灌溉渠成型机/混凝土排水沟一次成型机,山东合隆机械专利赋能,口碑领跑
  • day13补
  • 2026年高温熔体压力变送器厂家推荐与行业分析
  • ​三拼域名chaojidao.com深度点评​
  • mongo change stream实践
  • ue 蓝图打印信息
  • DeepSeek辅助总结的GizmoSQL数据库自述文件
  • 线段树优化建图
  • 智慧农业之花卉识别 花草病虫害目标检测 花卉品种识别 植物病虫害预警 花卉品类及病虫害的精准识别 植物病虫害识别 毛毛虫识别第10455期
  • 基于MATLAB r2021b小波散射网络的空气压缩机故障诊断研究
  • AP6256 WIFI模块的低功耗模式psm
  • Quora 多账号内容营销:如何避免被判定为“操纵舆论”?
  • 飞滴网约车项目Day01
  • 2026年女性/ 植发际线 / 美学 / 高颅顶 /鬓角 植发 技术好的植发机构推荐好评榜 美学设计/自然原生感/无尴尬期/全生命周期管理
  • Leetcode会员尊享100题:270.最接近的二叉树值
  • 大数据深度学习|计算机毕设项目|计算机毕设答辩|静脉输液液位检测系统
  • 告别题海战术:主管技师备考的数字化备考方案
  • 剪辑IP口播完整版本
  • 编程作为IT行业中不可或缺的职位
  • 研读主管技师备考攻略:高效掌握考试难点
  • 食品异物检测技术:X光机如何守护食品安全
  • Ollama 远程访问完整实战:One-API + 内网穿透 + Cloudflare Tunnel 全方案解析
  • 实用指南:Rust 动态分发(dyn Trait)详解
  • 生产计划和排产计划一混,ERP再怎么用管理也乱!
  • 2026年女性/ 植发际线 / 美学 / 高颅顶 /鬓角 植发 技术好的植发机构推荐排行榜 美学设计/自然原生感/无尴尬期/全生命周期管理
  • GEO优化:提升本地搜索可见度的关键技术解析
  • 蒙特卡洛模拟电动汽车的有序充放电策略及其在优化调度、微电网与综合能源、储能、新能源方向的基础入...
  • 供应链商城系统推荐|千匠网络表现突出,成传统产业首选服务商
  • 2026年女性植发/发际线植发/头顶稀疏/不剃发植发/恢复效果成功案例丰富多样的植发机构推荐榜 美学定制/无尴尬期/全周期养固
  • 2026年女性植发/发际线植发/头顶稀疏/不剃发植发/恢复效果成功案例丰富多样的植发机构推荐榜 美学定制/无尴尬期