当前位置: 首页 > news >正文

MyBatis XML 配置完整示例(含所有核心配置项)


MyBatis XML 配置完整示例(含所有核心配置项)

在这里插入图片描述


1. 完整 mybatis-config.xml 配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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"/><!-- 启用驼峰命名自动映射(数据库字段名 snake_case → 对象属性 camelCase) --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 日志实现(如 Log4j、SLF4J) --><setting name="logImpl" value="SLF4J"/><!-- 默认执行器(SimpleExecutor/JdbcBatchExecutor/ReuseExecutor) --><setting name="defaultExecutorType" value="SIMPLE"/></settings><!-- 环境配置(多环境支持) --><environments default="development"><!-- 开发环境 --><environment id="development"><!-- 事务管理器类型(JDBC/JTA) --><transactionManager type="JDBC"/><!-- 数据源类型(UNPOOLED/POOLED/JNDI) --><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"/> <!-- 每24小时刷新 --><size>1024</size> <!-- 缓存容量 --><readWrite/> <!-- 可读写缓存 --><blockWhenQuoted value="true"/> <!-- 阻塞式缓存 --></cacheConfiguration><!-- 映射器配置 --><mappers><!-- 通过资源路径加载XML --><mapper resource="com/example/mapper/UserMapper.xml"/><!-- 通过类路径加载 --><mapper class="com.example.mapper.UserMapper"/><!-- 扫描包下的所有Mapper接口 --><package name="com.example.mapper"/></mappers>
</configuration>

2. 补充配置:Mapper XML 文件示例
<!-- UserMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><!-- 启用命名空间级缓存 --><cache/><!-- SQL 语句 --><select id="selectUserById" resultType="User">SELECT * FROM user WHERE id = #{id}</select><!-- 动态 SQL --><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><!-- 使用 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;// Getters and Setters
}

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>
属性说明示例值
driverJDBC 驱动类名。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 &gt; #{age}</if></where>
</select>

5.5 缓存配置
<!-- Mapper 级缓存 -->
<cache/> <!-- 默认使用 HashMap 缓存 --><!-- 自定义缓存配置 -->
<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. 完整配置流程

  1. 配置数据源:在 <environments> 中定义开发和生产环境的数据源。
  2. 启用缓存:在 <cache><cacheConfiguration> 中配置二级缓存。
  3. 定义类型别名:通过 <typeAliases> 简化实体类引用。
  4. 注册 Mapper:通过 <mappers> 指定 SQL 映射文件或接口。
  5. 动态 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. 配置文件验证
# 验证 XML 文件语法
mvn validate

10. 总结

  • XML 配置是 MyBatis 的核心配置方式,适合复杂场景。
  • 关键配置项settings, environments, mappers 是必须配置的。
  • 最佳实践
    • 使用 <typeAliases> 简化实体类引用。
    • 通过 <plugins> 集成分页、日志等插件。
    • 在 Mapper XML 中使用 <cache> 启用二级缓存。

通过 XML 配置,可以完全控制 MyBatis 的行为,适用于需要精细配置的项目。

相关文章:

  • 单片机-89C51部分:4、固件烧录
  • MAVLink协议:原理、应用与实践
  • Pytorch(无CPU搭建)+Jupyter
  • 代码随想录算法训练营第二十八天
  • Pygame入门:零基础打造你的第一个游戏窗口
  • 二、UI自动化测试02--元素定位方法
  • Leetcode刷题 由浅入深之哈希法——202. 快乐数
  • Adruino:传感器及步进电机
  • 我们分析前端生活。
  • 驱动开发硬核特训 · Day 21(上篇加强版):深入理解子系统机制与实战初探
  • 微服务架构下 MySQL 大表分库分表方案
  • 【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现
  • std::mutex底层实现原理
  • Spring Boot集成RocketMQ
  • Win7 SSL证书问题
  • 【C++11】列表初始化
  • 第34课 常用快捷操作——按“空格键”旋转图元
  • 使用 binlog2sql 闪回 MySQL8 数据
  • 高精度运算(string函数)
  • 生成式AI全栈入侵:当GPT-4开始自动编写你的Next.js路由时,人类开发者该如何重新定义存在价值?
  • 王庆成:儒家、墨家和洪秀全的“上帝”
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 中公教育:去年全面扭亏,经营性现金流增长169.6%
  • 保时捷中国研发中心落户上海虹桥商务区,计划下半年投入运营
  • 对外投资增长、消费市场持续升温,中国经济砥砺前行
  • 万能险新规落地:保险期限不得低于五年,明确万能险销售“负面清单”