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启用/禁用二级缓存。 truelazyLoadingEnabled启用延迟加载(关联对象按需加载)。 trueautoMappingBehavior自动映射行为(NONE, PARTIAL, FULL)。 PARTIALmapUnderscoreToCamelCase自动将数据库字段名(snake_case)转换为对象属性名(camelCase)。 truelogImpl日志实现(如 SLF4J, LOG4J)。 SLF4JdefaultExecutorType默认执行器类型(SIMPLE, REUSE, BATCH)。 SIMPLE
5.2 数据源配置(<dataSource>)
属性 说明 示例值 driverJDBC 驱动类名。 com.mysql.cj.jdbc.Driverurl数据库连接 URL。 jdbc:mysql://localhost:3306/mydbusername数据库用户名。 rootpassword数据库密码。 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 的行为,适用于需要精细配置的项目。