MyBatis 配置文件的作用和结构

MyBatis 配置文件(通常命名为 mybatis-config.xmlmybatis-config.xml.vm ), MyBatis 配置文件是 MyBatis 的核心组成部分,它包含了 MyBatis 的全局配置信息,例如数据库连接信息、事务管理器、类型别名、类型处理器、插件等。 通过配置文件,我们可以灵活地配置 MyBatis 的属性,使其适应不同的应用场景和数据库环境。

一、 作用 (Purpose)

MyBatis 配置文件的主要作用是:

  1. 配置数据库连接信息: 指定数据库连接的驱动程序、URL、用户名、密码等信息。
  2. 配置事务管理器: 指定 MyBatis 使用的事务管理器类型(例如 JDBC 或 MANAGED)。
  3. 配置 MyBatis 的全局设置: 例如是否启用缓存、是否启用延迟加载、是否将数据库字段的下划线命名风格自动转换为 Java 驼峰命名风格等。
  4. 定义类型别名: 为常用的 Java 类型设置别名,简化 SQL 映射文件的配置。
  5. 注册类型处理器 (TypeHandlers): 注册自定义的类型处理器,用于处理特殊类型的转换。
  6. 配置对象工厂 (ObjectFactory): 配置自定义的对象工厂,用于创建对象实例。
  7. 注册插件 (Plugins): 配置 MyBatis 插件,例如分页插件、性能监控插件等。
  8. 注册 SQL 映射文件 (Mappers): 将 SQL 映射文件 (Mapper XML Files) 注册到 MyBatis 中,使 MyBatis 能够找到和使用这些文件定义的 SQL 语句。

二、 结构 (Structure)

MyBatis 配置文件的根元素是 <configuration>,它包含多个子元素,用于配置 MyBatis 的各个方面。 以下是一个典型的 MyBatis 配置文件结构:

<?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>

    <!-- 1. properties (属性) -->
    <properties resource="database.properties">
        <!-- 可以包含多个 <property> 元素,用于定义属性 -->
    </properties>

    <!-- 2. settings (设置) -->
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 更多设置 -->
    </settings>

    <!-- 3. typeAliases (类型别名) -->
    <typeAliases>
        <typeAlias alias="User" type="com.example.model.User"/>
        <!-- 也可以使用 package 扫描 -->
        <!-- <package name="com.example.model"/> -->
    </typeAliases>

    <!-- 4. typeHandlers (类型处理器) -->
    <typeHandlers>
        <typeHandler handler="com.example.handler.MyTypeHandler" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
        <!-- 也可以使用 package 扫描 -->
        <!-- <package name="com.example.handler"/> -->
    </typeHandlers>

    <!-- 5. objectFactory (对象工厂) -->
    <objectFactory type="com.example.factory.MyObjectFactory">
        <!-- 可以配置 constructorArg 和 property 元素 -->
    </objectFactory>

    <!-- 6. plugins (插件) -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.MybatisInterceptor">
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

    <!-- 7. environments (环境配置) -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}"/>
                <property name="url" value="${database.url}"/>
                <property name="username" value="${database.username}"/>
                <property name="password" value="${database.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 8. mappers (映射器) -->
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
        <!-- 也可以使用 package 扫描 -->
        <!-- <package name="com.example.mapper"/> -->
    </mappers>

</configuration>

三、各个元素详解

  1. <properties> (属性):

    • 作用: 用于定义和加载属性,可以在配置文件中使用 ${} 占位符引用这些属性。

    • 属性来源:

      • 直接在 <properties> 元素内部定义。
      • 通过 resource 属性加载外部属性文件 (例如 database.properties)。
      • 通过 url 属性加载远程属性文件。
      • 可以在 <properties> 元素中配置多个 resourceurl 属性,MyBatis 会按照顺序加载这些文件。
    • 属性覆盖: 如果多个属性文件中定义了相同的属性,后面的文件中的属性会覆盖前面的文件中的属性。

    • 示例:

      <properties resource="database.properties">
          <!-- 也可以直接定义属性 -->
          <property name="jdbc.username" value="root"/>
      </properties>
      

      database.properties:

      database.driver=com.mysql.cj.jdbc.Driver
      database.url=jdbc:mysql://localhost:3306/mybatis_db
      database.username=
      database.password=your_password
      
  2. <settings> (设置):

    • 作用: 用于配置 MyBatis 的全局行为。

    • 常用设置:

      • cacheEnabled:是否启用二级缓存 (默认 true)。
      • lazyLoadingEnabled:是否启用延迟加载 (默认 false)。
      • aggressiveLazyLoading:当启用延迟加载时,是否立即加载所有延迟加载属性 (默认 true)。 设置为 false 可以提高性能。
      • multipleResultSetsEnabled:是否允许单个语句返回多个结果集 (默认 true)。
      • useColumnLabel:是否使用列标签代替列名 (默认 true)。
      • useGeneratedKeys:是否允许 MyBatis 使用 JDBC 的 getGeneratedKeys 方法获取自增主键值 (默认 false)。
      • defaultExecutorType:指定执行器的类型 (SIMPLE, REUSE, BATCH)。
      • defaultStatementTimeout:设置 Statement 的超时时间 (秒)。
      • defaultFetchSize:设置每次从数据库获取的记录数量。
      • mapUnderscoreToCamelCase:是否将数据库字段的下划线命名风格自动转换为 Java 驼峰命名风格 (默认 false)。
    • 示例:

      <settings>
          <setting name="cacheEnabled" value="true"/>
          <setting name="lazyLoadingEnabled" value="true"/>
          <setting name="mapUnderscoreToCamelCase" value="true"/>
      </settings>
      
  3. <typeAliases> (类型别名):

    • 作用: 为常用的 Java 类型设置别名,简化 SQL 映射文件的配置。

    • 两种配置方式:

      • <typeAlias>:单独定义类型别名。
      • <package>:扫描指定包下的所有类,自动生成别名(类名首字母小写)。
    • 示例:

      <typeAliases>
          <typeAlias alias="User" type="com.example.model.User"/> <!-- 为 com.example.model.User 类设置别名为 User -->
          <package name="com.example.model"/> <!-- 扫描 com.example.model 包,自动生成别名 -->
      </typeAliases>
      

      配置之后, 可以在SQL映射文件中使用User来代替com.example.model.User了.

  4. <typeHandlers> (类型处理器):

    • 作用: 用于处理 Java 类型和 JDBC 类型之间的转换。

    • MyBatis 内置了一些常用的类型处理器,例如 IntegerTypeHandler, StringTypeHandler, DateTypeHandler 等。

    • 你也可以自定义类型处理器,来处理特殊类型的转换,例如将 JSON 字符串转换为 Java 对象。

    • 配置方式:

      • <typeHandler>:单独注册类型处理器。

      • <package>:扫描指定包下的所有类型处理器。

      • 也可以使用注解的方式注册 (在TypeHandler类上加@MappedTypes@MappedJdbcTypes)

    • 示例:

      <typeHandlers>
          <typeHandler handler="com.example.handler.JsonTypeHandler" javaType="com.example.model.MyObject" jdbcType="VARCHAR"/>
          <package name="com.example.handler"/> <!-- 扫描 com.example.handler 包,自动注册类型处理器 -->
      </typeHandlers>
      
  5. <objectFactory> (对象工厂):

    • 作用: 用于创建对象实例。 MyBatis 默认使用 DefaultObjectFactory,你可以自定义 ObjectFactory 来改变对象的创建方式。

    • 示例:

      <objectFactory type="com.example.factory.MyObjectFactory">
          <property name="someProperty" value="someValue"/> <!-- 可以配置对象工厂的属性 -->
      </objectFactory>
      
  6. <plugins> (插件):

    • 作用: 用于配置 MyBatis 插件,扩展 MyBatis 的功能。

    • MyBatis 插件允许你拦截 MyBatis 的执行过程,例如:

      • 执行器 (Executor)
      • 语句处理器 (StatementHandler)
      • 参数处理器 (ParameterHandler)
      • 结果集处理器 (ResultSetHandler)
    • 常用的插件:

      • PageHelper:分页插件。
      • MyBatis Generator:代码生成器。
    • 示例:

      <plugins>
          <plugin interceptor="com.github.pagehelper.MybatisInterceptor">
              <property name="dialect" value="mysql"/>
          </plugin>
      </plugins>
      
  7. <environments> (环境配置):

    • 作用: 用于配置数据库连接信息。

    • MyBatis 支持配置多个环境,例如开发环境、测试环境、生产环境。

    • 使用 default 属性指定默认使用的环境。

    • <environment> 元素:

      • id 属性:指定环境的唯一标识。
      • <transactionManager> 元素:配置事务管理器。
        • type 属性:指定事务管理器的类型 (JDBC, MANAGED)。
        • JDBC:使用 JDBC 提供的事务管理。
        • MANAGED:将事务管理委托给容器(例如 Spring)。
      • <dataSource> 元素:配置数据源。
        • type 属性:指定数据源的类型 (UNPOOLED, POOLED, JNDI)。
        • UNPOOLED:每次请求都创建一个新的数据库连接。
        • POOLED:使用连接池管理数据库连接。
        • JNDI:从 JNDI 目录中获取数据源。
    • 示例:

      <environments default="development">
          <environment id="development">
              <transactionManager type="JDBC"/>
              <dataSource type="POOLED">
                  <property name="driver" value="${database.driver}"/>
                  <property name="url" value="${database.url}"/>
                  <property name="username" value="${database.username}"/>
                  <property name="password" value="${database.password}"/>
              </dataSource>
          </environment>
      </environments>
      
  8. <mappers> (映射器):

    • 作用: 用于注册 SQL 映射文件。

    • 配置方式:

      • <mapper resource="com/example/mapper/UserMapper.xml"/>:使用 resource 属性指定 SQL 映射文件的路径(相对于 classpath 根目录)。
      • <mapper url="file:///path/to/UserMapper.xml"/>:使用 url 属性指定 SQL 映射文件的 URL。
      • <mapper class="com.example.mapper.UserMapper"/>:使用 class 属性指定 Mapper 接口的类名,MyBatis 会自动查找与该接口同名的 SQL 映射文件。
      • <package name="com.example.mapper"/>:扫描指定包下的所有 Mapper 接口,MyBatis 会自动查找与这些接口同名的 SQL 映射文件。 这种方式通常与 Spring 的 @MapperScan 注解一起使用。
    • 示例:

      <mappers>
          <mapper resource="com/example/mapper/UserMapper.xml"/>
          <package name="com.example.mapper"/> <!-- 扫描 com.example.mapper 包,自动注册 Mapper 接口 -->
      </mappers>
      

四、 DTD (Document Type Definition)

MyBatis 配置文件需要遵循特定的 DTD 约束, DTD 文件定义了 XML 文档的结构和元素。

  • DTD 声明:

    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
  • DTD 文件:

    • mybatis-3-config.dtd 文件定义了 MyBatis 配置文件的结构。 可以在 MyBatis 的官方网站上找到该文件。
    • 通常不需要手动修改 DTD 文件,只需要在 XML 配置文件中声明 DTD 即可。

五、 注意事项

  1. 配置文件位置: MyBatis 配置文件通常放在 classpath 根目录下,例如 src/main/resources 目录。
  2. 命名规范: 建议使用 mybatis-config.xml 作为配置文件的名称。
  3. DTD 声明: 确保在 XML 配置文件中声明了正确的 DTD,以便 MyBatis 能够正确解析配置文件。
  4. 属性值: 确保所有属性值都正确设置,例如数据库连接信息、缓存配置等。
  5. 版本兼容性: MyBatis 的不同版本可能存在一些差异,需要注意配置文件的兼容性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值