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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/155.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 程序运行和类路径处理

PS D:\java_test> java .\java\Dog 错误: 找不到或无法加载主类 .\java\Dog 原因: java.lang.ClassNotFoundException: /\java\DogJava 程序运行和类路径处理 问题描述 在运行 Java 程序时&#xff0c;可能会遇到 ClassNotFoundException 错误&#xff0c;这是因为 Java 虚…

7.学习笔记-Maven进阶(P75-P89)-进度(p75-P80)

1.MAVEN-01-分模块开发的意义 &#xff08;一&#xff09;分模块开发意义 模块可以按功能划分&#xff0c;也可以按团队划分&#xff0c;所以把domain的方法抽取出来&#xff0c;进行共享&#xff0c;从而提高开发 的效率。 &#xff08;1&#xff09;分模块开发的意义&#xf…

CUDA编程之Grid、Block、Thread线程模型

一、线程模型:Grid、Block、Thread概念 ‌1. 层级定义‌ ‌Thread(线程)‌ CUDA中最基本的执行单元,对应GPU的单个CUDA核心(SP)。每个线程独立执行核函数指令,拥有独立的寄存器和局部内存空间‌。 ‌Block(线程块)‌ 由多个线程组成(通常为32的倍数),是逻辑上的并…

8. 深入Spring AI:自定义Advisor

1、前言 前面大篇幅介绍了关于Spring AI Advisor机制,并介绍了一些常见的内置的advisor。今天我们来自定义有一个Advisor。 2、快速开始 要自定义一个属于自己的Advisor,其实很自定义一个AOP一样简单。只需遵循以下步骤: 创建一个Advisor类,实现CallAroundAdvisor或Stre…

【C++】继承----下篇

文章目录 前言一、实现一个不能继承的类二、友元与继承三、继承与静态成员四、多继承以及菱形继承问题1.继承模型&#xff1a;2.菱形继承的问题3.虚拟继承解决数据冗余和二义性的原理4.虚拟继承的原理 五、继承的总结和反思1.继承和组合 总结 前言 各位好呀!今天呢我们接着讲继…

五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践

目录 前言 1、卤鹅哥与甲亢哥的爆火事件 2、荣昌卤鹅产业的空间分布 3、使用Java 和天地图进行产业挖掘 一、地名检索简介 1、地名检索功能 2、地名检索API介绍 二、荣昌卤鹅检索实践 1、数据获取流程 2、天地图API请求构建 3、参数构建及调用 4、结果生成及本地保存…

AI数字人:繁荣背后的伦理困境与法律迷局(8/10)

摘要&#xff1a;本文深入剖析 AI 数字人从虚拟走向现实的历程&#xff0c;阐述其融合多技术实现从静态到动态交互的跨越&#xff0c;爆发式应用于各领域带来的商业价值与社会影响&#xff0c;同时直面由此引发的伦理法律挑战&#xff0c;包括身份认同、数据隐私、责任归属及权…

【C++指南】告别C字符串陷阱:如何实现封装string?

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f4ac; 注意&#xff1a;本章节只详讲string中常用接口及实现&#xff0c;有其他需求查阅文档介绍。 &#x1f680; 今天通过了…

头歌实训之索引

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

第25周:DenseNet+SE-Net实战

目录 前言 1.准备工作 2.查看数据 3.划分数据集 4.创建模型 5.编译及训练模型 6.结果可视化 7.总结 前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.准备工作 import torch import torch.nn as nn imp…

什么是Maven

Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具&#xff0c;专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是&#xff1a;专家&#xff0c;内行。Maven 是目前最流行的自动化构建工具&#xff0…

VSCode如何修改默认扩展路径和用户文件夹目录到其他盘以及微信开发工具如何修改扩展路径到其他盘

ps:因公司电脑c盘内存严重不足&#xff0c;而出本篇文章 1.Visual Studio Code 随着VsCode的使用时间的推移&#xff0c;安装的扩展以及数据逐步增多&#xff0c;导致c盘内存占用较大&#xff0c;所以这里将vscode的默认缓存路径等迁移到其他盘。 步骤如下 1.找到默认的存储…