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

发布于:2025-05-01 ⋅ 阅读:(35) ⋅ 点赞:(0)

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"/>
        <!-- 启用驼峰命名自动映射(数据库字段名 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 mapper
  PUBLIC "-//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>
属性 说明 示例值
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 &gt; #{age}
        </if>
    </where>
</select>

5.5 缓存配置
<!-- Mapper 级缓存 -->
<cache/> <!-- 默认使用 HashMap 缓存 -->

<!-- 自定义缓存配置 -->
<cache
    type="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 的行为,适用于需要精细配置的项目。


网站公告

今日签到

点亮在社区的每一天
去签到