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/>
< cachetype = " 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 的行为,适用于需要精细配置的项目。