MyBatis XML 配置完整示例(含所有核心配置项)
1. 完整 mybatis-config.xml
配置文件
<?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>
< settings>
< setting name = " cacheEnabled" value = " true" />
< setting name = " lazyLoadingEnabled" value = " true" />
< setting name = " autoMappingBehavior" value = " PARTIAL" />
< setting name = " mapUnderscoreToCamelCase" value = " true" />
< setting name = " logImpl" value = " SLF4J" />
< setting name = " defaultExecutorType" value = " SIMPLE" />
</ settings>
< 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/mydb" />
< property name = " username" value = " root" />
< property name = " password" value = " root" />
</ dataSource>
</ environment>
< environment id = " production" >
< transactionManager type = " JDBC" />
< dataSource type = " POOLED" >
< property name = " driver" value = " com.mysql.cj.jdbc.Driver" />
< property name = " url" value = " jdbc:mysql://prod-db:3306/mydb" />
< property name = " username" value = " prod_user" />
< property name = " password" value = " prod_password" />
</ dataSource>
</ environment>
</ environments>
< typeAliases>
< typeAlias type = " com.example.entity.User" alias = " User" />
< package name = " com.example.entity" />
</ typeAliases>
< typeHandlers>
< typeHandler handler = " com.example.handler.DateTypeHandler" />
< package name = " com.example.handler" />
</ typeHandlers>
< plugins>
< plugin interceptor = " com.example.plugin.PageInterceptor" >
< property name = " param1" value = " value1" />
</ plugin>
</ plugins>
< cacheConfiguration>
< flushInterval hours = " 24" />
< size> 1024</ size>
< readWrite/>
< blockWhenQuoted value = " true" />
</ cacheConfiguration>
< mappers>
< mapper resource = " com/example/mapper/UserMapper.xml" />
< mapper class = " com.example.mapper.UserMapper" />
< package name = " com.example.mapper" />
</ mappers>
</ configuration>
2. 补充配置:Mapper XML 文件示例
<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.example.mapper.UserMapper" >
< cache/>
< select id = " selectUserById" resultType = " User" >
SELECT * FROM user WHERE id = #{id}
</ select>
< select id = " selectUsersByName" resultType = " User" >
SELECT * FROM user
< where>
< if test = " name != null" >
AND name LIKE CONCAT('%', #{name}, '%')
</ if>
</ where>
</ select>
< resultMap id = " userResultMap" type = " User" >
< id column = " id" property = " id" />
< result column = " name" property = " name" />
< result column = " age" property = " age" />
</ resultMap>
< select id = " selectUserWithResultMap" resultMap = " userResultMap" >
SELECT id, name, age FROM user WHERE id = #{id}
</ select>
</ mapper>
3. 实体类示例(User.java)
package com. example. entity ;
public class User {
private Long id;
private String name;
private Integer age;
}
4. 核心配置项详解表格
配置项
描述
示例
作用
<settings>
全局行为配置。
<setting name="cacheEnabled" value="true"/>
启用/禁用缓存、延迟加载、日志等全局行为。
<environments>
定义多环境配置(如开发/生产)。
<environment id="development">...</environment>
切换不同环境的数据源和事务管理器。
<dataSource>
配置数据库连接信息。
<dataSource type="POOLED">...</dataSource>
定义数据库驱动、URL、用户名和密码。
<typeAliases>
定义类型别名,简化实体类引用。
<typeAlias type="com.example.entity.User" alias="User"/>
避免在 XML 中重复写全限定类名。
<typeHandlers>
注册自定义类型处理器,处理复杂数据类型(如日期、枚举)。
<typeHandler handler="com.example.handler.DateTypeHandler"/>
将数据库类型与 Java 类型双向转换。
<plugins>
配置拦截器(如分页插件、日志插件)。
<plugin interceptor="com.example.plugin.PageInterceptor">...</plugin>
在 SQL 执行前/后插入自定义逻辑。
<cacheConfiguration>
全局二级缓存配置。
<cacheConfiguration>...</cacheConfiguration>
设置缓存刷新间隔、容量、读写模式等。
<mappers>
注册 Mapper 接口或 XML 文件。
<mapper resource="com/example/mapper/UserMapper.xml"/>
告知 MyBatis 需要加载的 SQL 映射文件或接口。
<cache>
在 Mapper XML 中启用二级缓存。
<cache/>
将当前 Mapper 的查询结果缓存到内存中。
<resultMap>
定义结果集到对象的映射关系。
<resultMap id="userResultMap" type="User">...</resultMap>
处理复杂字段映射(如关联查询、嵌套对象)。
<select>
, <update>
, <insert>
, <delete>
定义 SQL 语句。
<select id="selectUserById" resultType="User">...</select>
定义增删改查的 SQL 逻辑,支持动态 SQL 和参数绑定。
<if>
, <choose>
, <where>
, <set>
动态 SQL 标签,生成条件语句。
<where> <if test="name != null">AND name = #{name}</if> </where>
根据参数动态拼接 SQL 条件。
5. 配置项分类说明
5.1 全局配置(<settings>
)
属性
说明
示例值
cacheEnabled
启用/禁用二级缓存。
true
lazyLoadingEnabled
启用延迟加载(关联对象按需加载)。
true
autoMappingBehavior
自动映射行为(NONE
, PARTIAL
, FULL
)。
PARTIAL
mapUnderscoreToCamelCase
自动将数据库字段名(snake_case)转换为对象属性名(camelCase)。
true
logImpl
日志实现(如 SLF4J
, LOG4J
)。
SLF4J
defaultExecutorType
默认执行器类型(SIMPLE
, REUSE
, BATCH
)。
SIMPLE
5.2 数据源配置(<dataSource>
)
属性
说明
示例值
driver
JDBC 驱动类名。
com.mysql.cj.jdbc.Driver
url
数据库连接 URL。
jdbc:mysql://localhost:3306/mydb
username
数据库用户名。
root
password
数据库密码。
root
5.3 映射器配置(<mappers>
)
标签
说明
示例
<mapper>
单个 Mapper 文件或接口。
<mapper resource="com/example/mapper/UserMapper.xml"/>
<package>
扫描包下的所有 Mapper 接口或 XML 文件。
<package name="com.example.mapper"/>
5.4 动态 SQL 示例
< select id = " selectUsersByCondition" resultType = " User" >
SELECT * FROM user
< where>
< if test = " name != null" >
AND name = #{name}
</ if>
< if test = " age != null" >
AND age > #{age}
</ if>
</ where>
</ select>
5.5 缓存配置
< cache/>
< cache
type = " org.mybatis.caches.ehcache.EhcacheCache"
eviction = " LRU"
flushInterval = " 60000"
size = " 1024"
readOnly = " false" />
< cacheConfiguration>
< flushInterval hours = " 24" />
< size> 1024</ size>
< readWrite/>
< blockWhenQuoted value = " true" />
</ cacheConfiguration>
6. 完整配置流程
配置数据源 :在 <environments>
中定义开发和生产环境的数据源。
启用缓存 :在 <cache>
或 <cacheConfiguration>
中配置二级缓存。
定义类型别名 :通过 <typeAliases>
简化实体类引用。
注册 Mapper :通过 <mappers>
指定 SQL 映射文件或接口。
动态 SQL :在 Mapper XML 中使用 <if>
, <where>
, <foreach>
等标签。
7. 核心配置项总结表格
配置项
描述
示例
作用
<configuration>
根节点,包含所有配置。
...
整个 MyBatis 配置的容器。
<settings>
全局行为配置。
cacheEnabled
, mapUnderscoreToCamelCase
控制 MyBatis 的运行时行为(如缓存、日志、自动映射)。
<environments>
环境配置(开发/生产)。
<environment id="development">...</environment>
切换不同环境的数据源和事务管理器。
<dataSource>
数据库连接配置。
<dataSource type="POOLED">...</dataSource>
定义数据库连接参数。
<typeAliases>
类型别名定义。
<typeAlias type="User" alias="User"/>
简化实体类引用,避免全限定类名。
<typeHandlers>
自定义类型处理器注册。
<typeHandler handler="DateTypeHandler"/>
处理复杂数据类型的转换(如日期、枚举)。
<plugins>
拦截器配置。
<plugin interceptor="PageInterceptor">...</plugin>
在 SQL 执行前/后插入自定义逻辑(如分页、日志)。
<cacheConfiguration>
全局二级缓存配置。
<cacheConfiguration>...</cacheConfiguration>
设置缓存刷新间隔、容量、读写模式等。
<mappers>
Mapper 注册。
<mapper resource="UserMapper.xml"/>
告知 MyBatis 需要加载的 SQL 映射文件或接口。
8. 关键配置说明
8.1 环境切换
< environments default = " development" >
< environment id = " development" > ...</ environment>
< environment id = " production" > ...</ environment>
</ environments>
8.2 动态 SQL 标签
标签
作用
<if>
条件判断。
<choose>
相当于 Java 的 switch
。
<where>
自动处理 SQL 的 WHERE
子句前缀。
<set>
自动处理 UPDATE
语句的 SET
子句。
<foreach>
遍历集合参数(如 IN
子句)。
9. 配置文件验证
mvn validate
10. 总结
XML 配置 是 MyBatis 的核心配置方式,适合复杂场景。
关键配置项 :settings
, environments
, mappers
是必须配置的。
最佳实践 :
使用 <typeAliases>
简化实体类引用。
通过 <plugins>
集成分页、日志等插件。
在 Mapper XML 中使用 <cache>
启用二级缓存。
通过 XML 配置,可以完全控制 MyBatis 的行为,适用于需要精细配置的项目。