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.mzph.cn/news/903068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商数据中台架构:淘宝 API 实时采集与多源数据融合技术拆解

引言 在当今竞争激烈的电商领域&#xff0c;数据已成为企业决策和业务发展的核心驱动力。电商数据中台能够整合和管理企业内外部的各种数据&#xff0c;为业务提供有力支持。其中&#xff0c;淘宝 API 实时采集与多源数据融合技术是数据中台架构中的关键部分。本文将深入探讨这…

ubuntu22.04部署Snipe-IT

文章目录 参考链接一、写在前二、安装操作系统三、安装 PHP四、下载 Snipe-IT五、安装依赖六、安装数据库并创建用户七、安装 Snipe-IT八、安装 Nginx九、Web 继续安装 Snipe-IT补充&#xff1a;20250427补充&#xff1a; 最后 参考链接 How to Install Snipe-IT on Ubuntu 22…

图论---Bellman-Ford算法

适用场景&#xff1a;有边数限制 ->&#xff08;有负环也就没影响了&#xff09;&#xff0c;存在负权边&#xff0c;O( n * m )&#xff1b; 有负权回路时有的点距离会是负无穷&#xff0c;因此最短路存在的话就说明没有负权回路。 从1号点经过不超过k条边到每个点的距离…

A. Ideal Generator

time limit per test 1 second memory limit per test 256 megabytes We call an array aa, consisting of kk positive integers, palindromic if [a1,a2,…,ak][ak,ak−1,…,a1][a1,a2,…,ak][ak,ak−1,…,a1]. For example, the arrays [1,2,1][1,2,1] and [5,1,1,5][5,…

[详细无套路]MDI Jade6.5安装包下载安装教程

目录 1. 软件包获取 2. 下载安装 3. 启动 4. 问题记录 写在前面: 垂死病中惊坐起,JAVA博主居然开始更博客了~ 最近忙项目了, 没啥更新的动力,见谅~见谅~. 这次博主的化工友友突然让帮安装JADE6.5软件,本来以为不就一个软件,直接拿捏. 不料竟然翻了个小车, 反被拿捏了. 既…

Serverless 在云原生后端的实践与演化:从函数到平台的革新

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从服务器到“无服务器”的后端演变 在传统后端开发中,我们需要为服务配置并维护服务器资源,无论是物理机、虚拟机还是容器化服务,都需要: 管理系统运行环境 监控负载与扩缩容 保证高可用与安…

【专题三】二分查找(2)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…

MySQL 详解之函数:数据处理与计算的利器

在 MySQL 中,函数可以接受零个或多个输入参数,并返回一个值。这些函数可以在 SELECT 语句的字段列表、WHERE 子句、HAVING 子句、ORDER BY 子句以及 UPDATE 和 INSERT 语句中使用。合理利用函数,可以简化 SQL 语句,提高开发效率。 MySQL 提供了大量的内置函数 (Built-in F…

探索具身智能协作机器人:技术、应用与未来

具身智能协作机器人&#xff1a;概念与特点 具身智能协作机器人&#xff0c;简单来说&#xff0c;就是将人工智能技术与机器人实体相结合&#xff0c;使其能够在与人类共享的空间中进行安全、高效协作的智能设备。它打破了传统机器人只能在预设环境中执行固定任务的局限&#…

基于物联网的园林防火监测系统

标题:基于物联网的园林防火监测系统 内容:1.摘要 随着全球气候变化和人类活动影响&#xff0c;园林火灾发生频率呈上升趋势&#xff0c;给生态环境和人类生命财产造成巨大损失。为有效预防和应对园林火灾&#xff0c;本文提出基于物联网的园林防火监测系统。该系统综合运用传感…

JAVA多线程(8.0)

目录 线程池 为什么使用线程池 线程池的使用 工厂类Executors&#xff08;工厂模式&#xff09; submit 实现一个线程池 线程池 为什么使用线程池 在前面我们都是通过new Thread() 来创建线程的&#xff0c;虽然在java中对线程的创建、中断、销毁、等值等功能提供了支持…

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1

希望借助手写这个go的中间件项目&#xff0c;能够理解go语言的特性以及用go写中间件的优势之处&#xff0c;同时也是为了更好的使用和优化公司用到的trpc&#xff0c;并且作者之前也使用过grpc并有一定的兴趣&#xff0c;所以打算从0构建一个rpc系统&#xff0c;对于生产环境已…

【学习笔记】Stata

一、Stata简介 Stata 是一种用于数据分析、数据管理和图形生成的统计软件包&#xff0c;广泛应用于经济学、社会学、政治科学等社会科学领域。 二、Stata基础语法 2.1 数据管理 Stata 支持多种数据格式的导入&#xff0c;包括 Excel、CSV、文本文件等。 从 Excel 文件导入…

Redis数据结构SDS,IntSet,Dict

目录 1.字符串&#xff1a;SDS 1.1.为什么叫做动态字符串 2.IntSet 2.1.inset如何保存大于当前编码的最大数字&#xff1f; 3.Dict 3.1Dict的扩容 3.2Dict的收缩 3.3.rehash 1.字符串&#xff1a;SDS SDS的底层是C语言编写的构建的一种简单动态字符串 简称SDS&#xff…

Maven的聚合工程与继承

目录 一、为什么需要使用Maven工程 二、聚合工程的结构 三、聚合工程实现步骤 四、父工程统一管理版本 五、编译打包 大家好&#xff0c;我是jstart千语。想着平时开发项目似乎都是用maven来管理的&#xff0c;并且大多都是聚合工程。而且在maven的聚合工程中&#xff0c…

前端职业发展:如何规划前端工程师的成长路径?

前端职业发展:如何规划前端工程师的成长路径? 大家好,我是全栈老李。今天咱们聊聊前端工程师的职业发展路径,这个话题看似简单,实则暗藏玄机。就像打游戏升级一样,你得知道下一关是什么,才能提前准备装备和技能点。 前端之路 一般我们从一个新手到大神,普遍需要经过…

【星海出品】分布式存储数据库etcd

etcd 数据库由 CoreOS 公司创建。 https://github.com/etcd-io/etcd api信息 https://etcd.io/docs/v3.5/dev-guide/api_reference_v3/ etcdctl --help etcd 最初由 CoreOS 公司开发&#xff0c;作为其核心项目之一。 CoreOS 成立于 2013 年&#xff0c;专注于容器化技术&#…

2025新版修复蛇年运势测试风水起名系统源码

2025新版修复蛇年运势测试风水起名系统源码 通过网盘分享的文件&#xff1a;2025xbfsysweb.rar 链接: https://pan.baidu.com/s/1r1MOkJJJMj9s9nQX_GzI3Q 提取码: 9weh 备用下载地址&#xff1a;http://pan.1234f.com:5212/s/JK1uw

Vue3 Pinia

一、Pinia 核心概念 Pinia 是 Vue3 官方推荐的状态管理库&#xff0c;相比 Vuex 4&#xff0c;具有以下优势&#xff1a; 更简洁的 API&#xff08;移除 mutations&#xff09; 完整的 TypeScript 支持 支持组合式 API 自动代码分割 轻量级&#xff08;仅 1KB&#xff09;…

音视频小白系统入门课-4

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 往期课程笔记传送门&#xff1a; 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2音视频小白系统入门笔记-3 将mp4文件转换为yuv文件 ffmpeg -i demo.mp4 # 输入文件-an …