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/10 23:13:50

蒙特卡洛模拟电动汽车的有序充放电策略及其在优化调度、微电网与综合能源、储能、新能源方向的基础入...

蒙特卡洛模拟电动汽车有序充放电(matlab)&#xff0c;适合优化调度&#xff0c;微电网&#xff0c;综合能源、储能、新能源方向的基础入门学习 最近在折腾电动汽车充放电调度的问题&#xff0c;发现蒙特卡洛模拟真是个神器。今天咱们就用Matlab整点有意思的——模拟100辆电动汽…

作者头像 李华
网站建设 2026/6/5 6:00:27

​三拼域名chaojidao.com深度点评​

三拼域名chaojidao.com深度点评 核心结论&#xff1a;chaojidao.com是一枚含义明确、行业属性强、终端潜力巨大的优质三拼域名&#xff0c;尤其在农业科技与食品领域具备突出价值&#xff0c;同时存在 "小米超级岛" 概念的跨界联想空间&#xff0c;建议长期持有并重…

作者头像 李华
网站建设 2026/6/1 7:43:08

漏洞扫描十大工具

漏洞扫描十大工具 AwVS AwVS是一款知名的Web网络漏洞扫描工具&#xff0c;它通过网络爬虫测试你的网站安全&#xff0c;检测流行安全漏洞。 a)、自动的客户端脚本分析器&#xff0c;允许对Ajax和Web 2.0应用程序进行安全性测试 b)、业内最先进且深入的SQL 注入和跨站脚本测试…

作者头像 李华
网站建设 2026/6/10 23:17:41

Redshift vs Octane 深度对比:哪款渲染器更适合 Cinema 4D 工作流程?

在 Cinema 4D 的世界里&#xff0c;选择合适的 GPU 渲染器能够显著提升你的创作效率和渲染质量。当前主流的两个选择是 Redshift 和 OctaneRender&#xff0c;它们各有特点&#xff0c;适合不同风格的项目需求。本文将从核心性能和工作流程体验角度&#xff0c;为你做一个清晰对…

作者头像 李华
网站建设 2026/6/10 16:02:56

【vtkPolyDataPointSampler 】——多边形数据点采样技术详解

VTK核心类解析:vtkPolyDataPointSampler 多边形数据点采样技术详解 简单说,vtkPolyDataPointSampler 就是 VTK里的 “点生成器”—— 专门给 3D 模型(比如三角形、多边形组成的物体)表面或内部,按需求打一堆采样点,生成的点云能直接用在后续的可视化、建模或计算里。 一…

作者头像 李华
网站建设 2026/6/10 16:14:26

电子签章选型指南:云巨头生态服务与垂直专业厂商的六大维度解析

随着电子签章应用在市场越来越普及和受追捧&#xff0c;超级大厂也相继推出了自己的电子签章产品&#xff0c;如华为的华为云电子签、阿里的阿里云电子签、腾讯的腾讯电子签服务。那这些大厂推出的电子签章产品和服务与传统第三方电子签公司北京安证通有什么相同和区别呢&#…

作者头像 李华