news 2026/9/3 0:55:54

配置加载与初始化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
配置加载与初始化

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对象中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 20:55:18

编程作为IT行业中不可或缺的职位

编程作为IT行业中不可或缺的职位&#xff0c;人才需求量也是只增不减的&#xff0c;要问2023年程序员的职业发展前景如何&#xff0c;随着防疫政策的放开&#xff0c;市场经济也会逐渐复苏。如今大数据、人工智能、物联网等领域的崛起&#xff0c;必然会使程序员有着良好的发展…

作者头像 李华
网站建设 2026/9/2 10:25:45

Quora多账号内容营销:如何避免被判定为“操纵舆论”?

Quora 一直是海外内容营销的重要阵地&#xff1a;高权重、搜索可见、用户愿意看长回答。但很多团队在尝试用多个账号做内容矩阵时&#xff0c;会遇到同一个问题&#xff1a; 回答被折叠、曝光突然下降&#xff0c;甚至账号被限制&#xff0c;提示涉及 coordinated behavior 或 …

作者头像 李华
网站建设 2026/8/29 7:41:45

设计模式学习(26) 总结(杂想)

截止今天&#xff0c;我的《设计模式》学习之路正式完结了&#xff0c;暂时告一段落&#xff0c;也算是完成了自己的一个心愿。很多感慨和杂想&#xff0c;没有逻辑&#xff0c;写到哪里是哪里。没啥干货知识&#xff0c;不喜跳过。 首先是感谢 距离提笔(2025.12.12)已过去快两…

作者头像 李华
网站建设 2026/9/2 1:46:29

技术深度解析:主流无人机倾斜摄影三维建模服务商盘点

随着实景三维中国建设的全面推进&#xff0c;无人机倾斜摄影技术已成为获取大范围三维空间数据的关键手段。其最终价值的体现&#xff0c;高度依赖于后端三维建模软件的能力。本文将深入剖析国内几家在技术路径与产品生态上具有代表性的无人机倾斜摄影三维建模服务商&#xff0…

作者头像 李华
网站建设 2026/8/28 22:18:57

CVE-2025-61882 漏洞复现(失败版)

CVE-2025-61882 漏洞复现&#xff08;已失败&#xff09; 漏洞描述 该漏洞源于Oracle E-Business Suite在处理用户请求时&#xff0c;多个组件存在安全缺陷&#xff1a;UiServlet未对用户提供的XML参数进行充分验证&#xff0c;导致SSRF漏洞&#xff1b;后续处理过程中缺乏对…

作者头像 李华
网站建设 2026/9/2 22:04:05

基于DDD开发的KYC用户实名认证

❯ 使用ddd进行开发&#xff0c;为什么能简化代码 ⏺ 很好的问题&#xff01;让我用你的 KYC 项目实际改造的例子来说明 DDD 为什么能简化代码。 &#x1f3af; 核心原因&#xff1a;消除重复 职责集中 1. 业务规则封装&#xff0c;避免到处重复验证 改造前&#xff08;贫血…

作者头像 李华