0

0

mybatis-config.xml是什么 如何用它来配置MyBatis框架

煙雲

煙雲

发布时间:2026-02-15 01:03:30

|

327人浏览过

|

来源于php中文网

原创

mybatis-config.xml 是 mybatis 启动必需的核心配置文件,定义数据源、环境、映射等关键行为,标签顺序必须严格遵循 properties→settings→typealiases→typehandlers→objectfactory→plugins→environments→databaseidprovider→mappers,否则解析失败。

mybatis-config.xml是什么 如何用它来配置mybatis框架

mybatis-config.xml 是 MyBatis 的核心全局配置文件,它不是可有可无的“辅助配置”,而是框架启动时必须加载的 XML 入口——没有它,MyBatis 无法知道数据库怎么连、事务怎么管、SQL 映射在哪、日志怎么打。

它本质是一份「运行时契约」:告诉 MyBatis 该用什么数据源、默认走哪个环境、SQL 结果怎么映射、哪些类可以简写别名、是否开启驼峰转换……所有影响行为的关键开关,都集中在这里定义。


为什么必须严格按顺序写标签?

MyBatis 解析 mybatis-config.xml 时会校验 XML 元素顺序,顺序错一位(比如把 <settings></settings> 放在 <properties></properties> 前面),启动直接抛异常:org.xml.sax.SAXParseException: The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"

正确顺序(必须死记)是:

  • <properties></properties>
  • <settings></settings>
  • <typealiases></typealiases>
  • <typehandlers></typehandlers>
  • <objectfactory></objectfactory>
  • <plugins></plugins>
  • <environments></environments>
  • <databaseidprovider></databaseidprovider>
  • <mappers></mappers>

常见错误:把 <mappers></mappers> 提前到 <settings></settings> 前面,或漏掉 <properties></properties> 却在 <environments></environments> 里用了 ${xxx} 占位符——此时 MyBatis 还没读到属性定义,自然报 Property not found


如何用 db.properties 解耦数据库连接信息?

硬编码数据库地址、账号密码在 XML 里,既不安全也不利于多环境切换。标准做法是抽离为外部 db.properties 文件,并通过 <properties resource="db.properties"></properties> 引入。

操作步骤:

Cassette
Cassette

Cassette能帮助您立即创作出梦想的音乐

下载
  • src/main/resources/ 下新建 db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myapp?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
  • mybatis-config.xml 顶部(<configuration></configuration> 内第一位置)写:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties resource="db.properties"/>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

⚠️ 注意:resource 路径是相对于类路径(classpath)的,不能写成 ./db.properties 或绝对路径;若提示找不到文件,请确认该文件确实在编译后出现在 target/classes/ 目录下。


哪些配置项真正影响日常开发?

不必背全 30+ 个 <setting></setting>,但以下 4 个几乎每个项目都要显式设置:

  • logImpl:指定日志实现,否则看不到 SQL 打印。常用值:LOG4JSLF4JSTDOUT_LOGGING(开发调试用)
  • mapUnderscoreToCamelCase:设为 true 后,数据库字段 user_name 自动映射到 Java 属性 userName,省去手写 <resultmap></resultmap>
  • lazyLoadingEnabled:启用懒加载,配合 <association></association>/<collection></collection> 避免 N+1 查询(但需搭配 aggressiveLazyLoading=false 才精准)
  • cacheEnabled:全局二级缓存开关,默认 true,但若没配 <cache></cache> 在 Mapper XML 中,实际无效

示例写法:

<settings>
  <setting name="logImpl" value="STDOUT_LOGGING"/>
  <setting name="mapUnderscoreToCamelCase" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="false"/>
</settings>

别名和 Mapper 注册最容易出错的点

<typealiases></typealiases> 不是为了“好看”,而是避免在 XML 里反复写一长串全限定类名,比如 com.example.entity.User

  • 单个别名(适合少量实体):<typealias type="com.example.entity.User" alias="User"></typealias>
  • 批量扫包(推荐):<package name="com.example.entity"></package> → 所有该包下类自动以类名小写为别名(User 对应 com.example.entity.User

<mappers></mappers> 是让 MyBatis “看见”你的 SQL 映射规则的地方。注意三类注册方式互斥且有约束:

  • <mapper resource="UserMapper.xml"></mapper>:XML 文件必须在 classpath 下,路径是相对于 classpath 的(如文件在 src/main/resources/mapper/UserMapper.xml,这里就写 mapper/UserMapper.xml
  • <mapper class="com.example.dao.UserMapper"></mapper>:接口必须与 XML 的 namespace 完全一致,且 XML 必须同名同包(或手动配置路径)
  • <package name="com.example.dao"></package>:会自动扫描该包下所有接口,但要求对应 XML 必须在 classpath 同路径下,例如接口 com.example.dao.UserMapper → XML 必须在 mapper/com/example/dao/UserMapper.xml 或用注解代替

最常踩的坑:ClassNotFoundExceptionInvalid bound statement (not found),90% 是因为 <mappers></mappers> 里写的路径不对,或者 XML 文件没被 Maven 编译进 target/classes(检查 pom.xml 是否遗漏 <resources></resources> 配置)。


配置本身不难,难的是每一步都依赖上一步的正确性:属性没加载 → 数据源初始化失败;环境没指定 → SqlSessionFactoryBuilder 构建时报空指针;Mapper 没注册 → session.getMapper(UserMapper.class) 返回 null。建议第一次搭建时,用最简结构(单环境 + 单 mapper + STDOUT_LOGGING)跑通再逐步加配置。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

942

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

375

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1636

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

369

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1210

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

434

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号