news 2026/6/11 15:51:42

配置加载与初始化

作者头像

张小明

前端开发工程师

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/6/12 3:53:40

MyBatis执行流程

1. SqlSession初始化与获取SqlSession是MyBatis的核心对象&#xff0c;用于执行SQL操作。SqlSessionFactory是创建SqlSession的工厂类&#xff0c;通过build()方法初始化&#xff0c;并通过openSession()方法获取SqlSession。SqlSessionFactoryBuilder是构建SqlSessionFactory的…

作者头像 李华
网站建设 2026/6/10 5:57:51

Leetcode会员尊享100题:270.最接近的二叉树值

给你二叉搜索树的根节点 root 和一个目标值 target &#xff0c;请在该二叉搜索树中找到最接近目标值 target 的数值。如果有多个答案&#xff0c;返回最小的那个。示例 1&#xff1a;输入&#xff1a;root [4,2,5,1,3], target 3.714286 输出&#xff1a;4示例 2&#xff1a…

作者头像 李华
网站建设 2026/6/5 2:35:52

三步让阿里云配置好 clawdbot(moltbot)附上专属优惠

就在刚刚&#xff08;2026年1月28日&#xff09;&#xff0c;阿里云正式宣布上线 Moltbot&#xff08;原名&#xff1a;Clawdbot&#xff09; 全套云服务&#xff01;这对于想做AI Agent的开发者来说是个重磅消息。它全面提供了Agent所需的算力、模型和消息应用支持 。 简单来…

作者头像 李华
网站建设 2026/6/11 0:46:40

腾讯地图:2026 年的技术革新与应用拓展

在 2026 年&#xff0c;数字化浪潮席卷各行各业&#xff0c;地图服务作为连接物理与数字世界的关键纽带&#xff0c;其重要性愈发凸显。腾讯地图凭借一系列技术革新与应用优化&#xff0c;成为了众多企业和开发者的首选。 强大技术架构支撑 腾讯地图拥有从 LBS 到时空引擎的进…

作者头像 李华
网站建设 2026/5/28 14:15:21

宠物寄养小程序前端功能版块详解

宠物寄养小程序以场景化前端功能为支撑&#xff0c;打通宠主寄养需求与机构服务能力的对接通道&#xff0c;既缓解宠主外出时的照料焦虑&#xff0c;又助力寄养机构规范服务流程。其前端设计围绕需求精准匹配、服务过程可视化、操作便捷化三大核心&#xff0c;构建全周期服务功…

作者头像 李华
网站建设 2026/5/30 19:58:44

用AI写英文论文,又用降AIGC系统降AI率,这样做的意义在哪?

有同学直接用AI完成英文论文后发现论文AIGC率高&#xff0c;又用降AIGC系统把论文AI率降低&#xff0c;这么做的意义在哪&#xff1f; 自从AI问世以来&#xff0c;很多需要写论文的学生发现这类AI工具简直就是对于写作困难的人的大救星&#xff0c;利用AI工具可以完成各类论文…

作者头像 李华