导读:本期聚焦于USDT程序员创作的《MyBatis配置文件mybatis-config.xml是什么?如何用它完成MyBatis框架配置》,敬请观看详情。启动MyBatis项目时报错Could not find resource mybatis-config.xml,通常意味着核心配置文件的加载路径出了问题。mybatis-config.xml是MyBatis框架的初始化入口,负责集中管理数据库连接环境、事务管理器、全局参数、类型别名以及映射器位置。和Spring Boot的application.yml不同,它不承载具体业务SQL,但决定框架如何找到数据源、如何解析Mapper接口以及是否开启驼峰映射等关键行为。配置时先声明根元素configuration,再按官方规定顺序写入properties、settings、typeAliases、environments和mappers,顺序错误会导致解析异常。实际开发中,文件一般放在src\main\resources目录下,通过Resources.getResourceAsStream加载。本文会拆解每一部分的作用,给出完整的XML配置示例,并说明如何把Mapper XML与Java接口正确关联,帮助快速搭建可运行的MyBatis项目。

mybatis-config.xml 是 MyBatis 框架的核心配置文件,它不是用来写 SQL 的,而是负责在框架启动时完成环境准备:告诉 MyBatis 连接哪台数据库、使用什么事务管理器、是否开启驼峰映射、去哪里加载 Mapper 映射文件。无论是原生 MyBatis 项目,还是用 Spring 整合 MyBatis,只要通过 SqlSessionFactoryBuilder 手动构建 SqlSessionFactory,都会优先读取这个文件。如果文件路径不对或内部元素顺序错误,通常会在启动阶段直接抛出异常,而不是等到执行 SQL 才暴露问题。

在 Java Web 项目中,这个文件一般放在类路径的根目录,例如 C:\Users\Administrator\IdeaProjects\demo\src\main\resources\mybatis-config.xml。该路径中的反斜杠在 Windows 系统中不能写成斜杠,否则资源加载器无法正确识别。接下来会从核心结构、数据源配置、映射器加载三个角度拆解配置方式。

MyBatis配置文件mybatis-config.xml是什么?如何用它完成MyBatis框架配置

mybatis-config.xml 的核心结构

整个配置文件的顶层元素只有一个 <configuration>,所有其他配置项都必须放在这个节点内部。MyBatis 对子元素的顺序有严格要求,如果顺序写错,在解析 XML 时就会抛出异常。官方推荐的顺序依次是:<properties><settings><typeAliases><typeHandlers><objectFactory><plugins><environments><databaseIdProvider><mappers>。实际项目中并不需要把所有节点都写全,但已经声明的节点必须遵循这个顺序。

其中 <properties> 用来引入外部属性文件,例如数据库账号密码单独放在 config.properties 中,避免硬编码到 XML 里。<settings> 控制框架的全局行为,比如开启驼峰命名转换可以让数据库字段 user_name 自动映射到 Java 属性 userName。<typeAliases> 用来给实体类配置短别名,减少 Mapper XML 中全限定类名的重复书写。<environments> 是环境配置的核心,可以定义多套环境并通过 default 属性指定当前生效的环境。

下面是一个结构完整的基础配置示例,包含了 properties、settings、typeAliases、environments 和 mappers 五个常用节点。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <properties resource="config.properties" />
    
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    
    <typeAliases>
        <package name="com.example.entity" />
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

这段配置虽然简短,但已经覆盖了 MyBatis 启动所需的全部关键信息。实际开发中,如果引入 Spring Boot 后不再单独使用 mybatis-config.xml,一些全局设置会迁移到 application.yml 中,但理解这个文件对排查配置问题仍然很有价值。

如何配置数据源与事务管理

数据源和事务管理是 mybatis-config.xml 中与数据库交互最密切的部分,全部位于 <environments> 节点下。一个 <environments> 可以包含多个 <environment>,分别对应开发环境、测试环境和生产环境。<environments default="development"> 中的 default 属性指定默认使用哪一套环境。每个 <environment> 必须有唯一的 id,并且要声明事务管理器和数据源两个子节点。

<transactionManager> 的 type 属性支持 JDBC 和 MANAGED 两种值。JDBC 表示由 MyBatis 自己控制事务,调用 commit 或 rollback 时直接操作数据库连接;MANAGED 表示事务交给容器管理,常见于 Spring 或应用服务器环境。数据源节点 <dataSource> 的 type 属性支持 POOLED、UNPOOLED 和 JNDI。POOLED 使用 MyBatis 内置的连接池,可以复用连接,减少频繁建立数据库连接的开销;UNPOOLED 每次请求都创建新连接,适合简单测试或并发极低的场景;JNDI 则从应用服务器中获取数据源,适合传统 Java EE 工程。

在 POOLED 模式下,连接池由 MyBatis 自行维护,不需要额外引入第三方连接池依赖。它通过 property 子节点接收 driver、url、username、password 四个基础参数。数据库驱动类的选择与 MySQL 版本有关,MySQL 8 及以上应使用 com.mysql.cj.jdbc.Driver,旧版本则使用 com.mysql.jdbc.Driver。如果驱动类写错,项目启动时虽然不一定会立刻报错,但第一次真正连接数据库时就会抛出 ClassNotFoundException,因此建议在配置阶段就确认驱动名称。

如何加载 Mapper 映射文件

<mappers> 节点负责告诉 MyBatis 去哪里寻找 SQL 映射文件或 Mapper 接口。这是配置文件中容易出错的地方,因为路径写错时不会影响框架启动,但调用对应方法时会提示找不到 Mapped Statement。加载 Mapper 有四种方式,分别是 resource、url、class 和 package。resource 是最常用的方式,它从类路径下加载 XML 映射文件,例如 mapper/UserMapper.xml 表示文件位于类路径的 mapper 目录下。

如果项目使用注解方式开发,可以不用 XML 映射文件,直接通过 class 属性指定 Mapper 接口的完全限定名,MyBatis 会从接口上的注解中读取 SQL。多个 Mapper 接口可以使用 package 子节点进行批量扫描,这样就不需要为每个接口单独写一条配置。例如 <package name="com.example.mapper" /> 会加载该包下所有接口,同时还会尝试加载与接口同名的 XML 文件,因此要求 XML 文件和接口位于同一目录结构下。

<mappers>
    <mapper resource="mapper/UserMapper.xml" />
    <mapper resource="mapper/OrderMapper.xml" />
    <mapper class="com.example.mapper.AdminMapper" />
    <package name="com.example.mapper" />
</mappers>

在 Java 代码中加载 mybatis-config.xml 时,通常使用 MyBatis 提供的 Resources 工具类。它会自动从类路径查找文件,因此参数不需要写绝对路径,只需要写相对于类路径根目录的资源名。加载完成后,通过 SqlSessionFactory 打开 SqlSession,再获取对应的 Mapper 代理对象即可执行数据库操作。

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectById(1);
    System.out.println(user.getName());
}

这段代码展示了原生 MyBatis 的标准使用流程。实际项目中如果整合了 Spring,SqlSessionFactory 通常交给 Spring 容器管理,但底层仍然会读取 mybatis-config.xml 中的部分配置,特别是 settings 和 typeAliases 等全局设置。因此即使项目已经接入 Spring Boot,理解这个配置文件的加载机制依然有助于排查配置不生效的问题。

常见配置错误与排查思路

第一个常见错误是子元素顺序写反。例如把 <settings> 放在 <properties> 前面,MyBatis 会提示 The content of element type configuration must match 之类的异常。解决方法是严格按照官方给出的顺序排列,不需要的节点可以省略,但不能随意调整已有节点的位置。第二个常见错误是 mapper resource 路径不正确。XML 映射文件如果放在了 resources 下的 mapper 目录中,配置里必须写 mapper/UserMapper.xml,而不是 /mapper/UserMapper.xml,多一个前导斜杠会导致资源找不到。

第三个问题与驼峰映射有关。默认情况下 MyBatis 不会把数据库字段 user_name 自动映射为 Java 属性 userName,如果 SQL 查询返回了 user_name 字段,而实体类只有 userName 属性,结果就会是 null。此时需要在 <settings> 中开启 mapUnderscoreToCamelCase,配置值为 true。第四个问题出现在数据库驱动上,很多旧项目升级 MySQL 8 后仍然使用 com.mysql.jdbc.Driver,会导致连接失败,需要改成 com.mysql.cj.jdbc.Driver,同时建议在 URL 后面加上 serverTimezone 参数,避免时区错误。

排查配置问题时,可以优先开启 MyBatis 的日志输出。在 <settings> 中设置 logImpl 为 STDOUT_LOGGING,框架会把加载的 mapper 数量、执行的 SQL 以及参数打印到控制台。这样既能确认 mybatis-config.xml 是否被正确加载,也能快速定位 SQL 映射缺失的问题。掌握这些排查方法之后,再配合良好的目录规范,mybatis-config.xml 的配置基本不会成为项目推进的阻碍。

MyBatis配置mybatis-config.xml数据库连接池修改时间:2026-09-19 11:13:51

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。