Skip to content

MyBatis 核心配置文件

  mybatis-config.xml 是 MyBatis 的全局配置文件,控制着 MyBatis 的行为和运行环境。配置项有严格的顺序要求。

一、配置结构

mybatis-config.xml 配置项(必须按此顺序):

  configuration
  ├─ properties        → 属性(引入外部配置)
  ├─ settings          → 全局设置(行为开关)
  ├─ typeAliases       → 类型别名
  ├─ typeHandlers      → 类型处理器
  ├─ objectFactory     → 对象工厂
  ├─ plugins           → 插件
  ├─ environments      → 环境配置(数据源、事务)
  ├─ databaseIdProvider → 数据库厂商标识
  └─ mappers           → Mapper 映射注册

如果顺序写错,MyBatis 会报 XML 解析错误。

二、properties(属性)

作用:引入外部配置文件,实现配置分离

三种方式:
  ① properties 标签内直接定义
  ② 引入外部 .properties 文件
  ③ 通过 SqlSessionFactoryBuilder.build() 方法参数传入

db.properties:

properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
xml
<!-- 引入外部属性文件 -->
<properties resource="db.properties">
    <!-- 也可以在内部直接定义(优先级低于外部文件) -->
    <!-- <property name="jdbc.username" value="root"/> -->
</properties>

<!-- 使用属性 -->
<dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</dataSource>
加载优先级(从高到低):
  ① 方法参数传入的 properties
  ② resource/url 引入的 properties 文件
  ③ properties 标签内定义的 property

如果 key 重复,优先级高的覆盖优先级低的。

三、settings(全局设置)

  settings 是 MyBatis 最核心的配置,控制着 MyBatis 的运行时行为。

xml
<settings>
    <!-- ========== 必备配置 ========== -->
    <!-- 驼峰命名自动映射:user_name → userName -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>

    <!-- 日志实现 -->
    <setting name="logImpl" value="SLF4J"/>

    <!-- ========== 缓存配置 ========== -->
    <!-- 全局开启/关闭二级缓存(默认 true) -->
    <setting name="cacheEnabled" value="true"/>

    <!-- ========== 延迟加载 ========== -->
    <!-- 延迟加载总开关(默认 false) -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 按需加载:调用 equals/clone/hashCode/toString 也会触发加载 -->
    <setting name="aggressiveLazyLoading" value="false"/>

    <!-- ========== 执行器 ========== -->
    <!-- 默认执行器类型:SIMPLE / REUSE / BATCH -->
    <setting name="defaultExecutorType" value="SIMPLE"/>

    <!-- ========== 返回主键 ========== -->
    <!-- 允许 JDBC 自动生成主键 -->
    <setting name="useGeneratedKeys" value="true"/>

    <!-- ========== 超时 ========== -->
    <!-- 查询超时时间(秒),默认不限制 -->
    <setting name="defaultStatementTimeout" value="25"/>

    <!-- ========== 映射 ========== -->
    <!-- 返回 null 值(而不是空对象) -->
    <setting name="returnInstanceForEmptyRow" value="false"/>
</settings>

常用 settings 速查:

设置项默认值说明
mapUnderscoreToCamelCasefalse下划线转驼峰
cacheEnabledtrue二级缓存开关
lazyLoadingEnabledfalse延迟加载开关
aggressiveLazyLoadingtrue激进延迟加载(3.4.1+ 改为 false)
useGeneratedKeysfalse是否使用 JDBC getGeneratedKeys
defaultExecutorTypeSIMPLE执行器类型
defaultStatementTimeout无限制查询超时
logImpl未设置日志实现
localCacheScopeSESSION一级缓存作用域

四、typeAliases(类型别名)

作用:给 Java 类型起短名,方便在 Mapper XML 中引用

三种方式:
  ① 单独定义别名
  ② 扫描包自动别名(推荐)
  ③ 给实体类加 @Alias 注解
xml
<typeAliases>
    <!-- 方式一:逐一配置 -->
    <typeAlias type="com.example.entity.User" alias="User"/>

    <!-- 方式二:扫描包(自动取类名首字母小写作为别名) -->
    <package name="com.example.entity"/>
</typeAliases>
java
// 方式三:注解方式(优先级最高)
@Alias("User")
public class User { ... }
使用别名后,Mapper XML 中可以直接写短名:
  resultType="User"           // 等价于 resultType="com.example.entity.User"
  resultType="user"           // 包扫描的默认别名(首字母小写)

MyBatis 内置别名:

别名类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

五、environments(环境配置)

作用:配置数据库连接环境,支持多环境切换

transactionManager 类型:
  JDBC    → 使用 JDBC 的事务管理(commit/rollback)
  MANAGED → 由容器管理事务(如 Spring)

dataSource 类型:
  POOLED  → 使用 MyBatis 内置连接池(推荐)
  UNPOOLED → 不使用连接池,每次新建连接
  JNDI    → 从 JNDI 容器获取数据源
xml
<environments default="development">
    <!-- 开发环境 -->
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <!-- 连接池配置 -->
            <property name="poolMaximumActiveConnections" value="20"/>
            <property name="poolMaximumIdleConnections" value="10"/>
            <property name="poolMaximumCheckoutTime" value="20000"/>
            <property name="poolTimeToWait" value="20000"/>
            <property name="poolPingQuery" value="SELECT 1"/>
            <property name="poolPingEnabled" value="true"/>
        </dataSource>
    </environment>

    <!-- 生产环境 -->
    <environment id="production">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${prod.jdbc.driver}"/>
            <property name="url" value="${prod.jdbc.url}"/>
            <property name="username" value="${prod.jdbc.username}"/>
            <property name="password" value="${prod.jdbc.password}"/>
        </dataSource>
    </environment>
</environments>

六、mappers(映射器注册)

作用:告诉 MyBatis 去哪里找 SQL 映射文件

四种方式:
  ① resource → 引用 XML 文件(推荐用于 XML 在 resources 下)
  ② url      → 引用绝对路径
  ③ class    → 引用 Mapper 接口(接口和 XML 同目录)
  ④ package  → 扫描包(最常用)
xml
<mappers>
    <!-- 方式一:逐个注册 XML 文件 -->
    <mapper resource="mapper/UserMapper.xml"/>
    <mapper resource="mapper/OrderMapper.xml"/>

    <!-- 方式二:URL 绝对路径 -->
    <mapper url="file:///D:/mappers/UserMapper.xml"/>

    <!-- 方式三:注册接口(要求 XML 和接口同目录) -->
    <mapper class="com.example.mapper.UserMapper"/>

    <!-- 方式四:扫描包(推荐,Spring Boot 常用) -->
    <package name="com.example.mapper"/>
</mappers>
必须满足:
  ① interface 的全限定名 = XML 的 namespace
  ② interface 的方法名 = XML 的 id
  ③ XML 和 interface 在同一路径下(或通过 resource 指定)

七、配置速记

mybatis-config.xml 核心配置记法:

  properties              → 引入配置(数据库连接信息)
  settings                → 全局开关(驼峰、缓存、日志、延迟加载)
  typeAliases             → 取别名(短名代替全限定名)
  environments            → 环境(数据源 + 事务管理器)
  mappers                 → 注册映射(XML 或接口)

八、面试要点

问题答案要点
配置项顺序?properties → settings → typeAliases → ... → mappers
如何切换环境?environments 的 default 属性
别名怎么配置?typeAliases 标签 + @Alias 注解
内置连接池配置?poolMaximumActiveConnections 等属性