MyBatis核心配置文件

MyBatis 是一个优秀的持久层框架,它简化了在 Java 应用程序中与关系数据库的交互。MyBatis 的核心配置文件是一个 XML 文件,它包含了框架的核心配置信息。下面是 MyBatis 核心配置文件的详细解释。

XML 命名空间声明

MyBatis 核心配置文件是以 XML 格式编写的,因此我们需要在文件的开头声明 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>
    ...
</configuration>

configuration 元素

MyBatis 核心配置文件的根元素是 <configuration>,它包含了 MyBatis 的所有配置信息。通过它,我们可以对 MyBatis 的全局属性、类型别名、数据库环境、映射器等进行配置。例如:
<configuration>
    <!-- 其他配置信息 -->
</configuration>

<configuration>元素可以包含多个子元素,下面是一些常见的子元素:

1. properties 元素

在 MyBatis 的核心配置文件中,我们可以使用 <properties> 元素来定义和引用属性。这些属性可以用于配置数据库连接信息、文件路径等。

以下是关于 <properties> 元素的一些注意事项和用法:

1.1 属性定义

我们可以在 MyBatis 的核心配置文件的中使用 <properties> 元素来定义属性,定义的方式如下:
<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</properties>

使用 <property> 元素来定义属性,其中:
  • name 属性指定属性的名称,即属性的键。
  • value 属性指定属性的值。
  • resource 属性指定属性文件的路径,可以是类路径(classpath)下的相对路径或绝对路径。

1.2 引用属性

在配置文件中,我们可以使用 ${} 语法来引用属性的值,${} 中的值为属性的名称。例如:
<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>

1.3 加载属性文件

我们还可以通过 resource 属性加载外部的属性文件,属性文件的格式为 .properties。属性文件中的键值对将被加载到 <properties> 元素中。例如:
<properties resource="com/mybatis/myProperty.properties"/>

1.4 覆盖属性

我们可以在配置文件中重新定义已经存在的属性,新的定义将会覆盖旧的定义。例如:
<properties>
    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
</properties>

需要注意的是:
  • <properties> 元素必须放在配置文件的根元素内。
  • 属性的定义顺序很重要,后面的定义会覆盖前面的定义。
  • 如果属性在配置文件中未被定义,可以通过Java系统属性或环境变量来覆盖属性的值。
  • 通过使用属性定义和引用,可以更加灵活地配置和管理常用的属性信息。

2. typeAliases 元素

在 MyBatis 的核心配置文件(通常是 mybatis-config.xml)中,typeAliases 元素用于配置类型别名。类型别名是为 Java 类或接口指定一个短名称,以便在映射文件或注解中使用这个短名称而不是完整的类名。这有助于简化映射文件的编写和阅读。

在 MyBatis 的核心配置文件中,typeAliases 元素用于配置类型别名,它允许你为 Java 类型指定一个短的别名,以便在映射文件中使用这些别名来引用 Java 类型。

typeAliases 元素支持以下三种配置方式:

2.1包扫描(package)

通过 package 元素配置包名,MyBatis 将扫描指定包下的所有类,并为每个类生成一个类型别名。类名将会是别名的默认值,首字母小写。

例如,在下面的配置中,MyBatis 将扫描 net.biancheng.c 包下的所有类,若该包下有一个类名为 "net.biancheng.c.User",则该类的别名就是“user”。
<typeAliases>
  <package name="net.biancheng.c"/>
</typeAliases>

2.2 类型别名(typeAlias)

通过 typeAlias 元素配置具体的类型别名。type 属性指定完整的类名,alias 属性指定类型的别名。在映射文件中,可以使用别名来引用该类型。
<typeAliases>
  <typeAlias type="com.example.models.User" alias="user"/>
</typeAliases>

2.3 自定义别名解析器(typeAliasRegistry)

通过 typeAliasRegistry 元素配置自定义的别名解析器。type 属性指定了实现了 org.apache.ibatis.type.TypeAliasRegistry 接口的类的完整名称。自定义的别名解析器可以用于根据自定义规则为类型生成别名。

<typeAliases>
  <typeAliasRegistry type="com.example.MyAliasResolver"/>
</typeAliases>

使用类型别名后,你可以在映射文件或注解中使用这些短名称来引用对应的 Java 类。例如,在映射文件中可以这样使用类型别名:
<select id="getUserById" resultType="User">
  SELECT * FROM users WHERE id = #{id}
</select>

在上面的示例中,resultType 属性使用了 User 类型别名,指定了查询结果的返回类型。

类型别名的配置可以提高 MyBatis 映射文件的可读性和可维护性。它使得映射文件中的类型引用更加简洁,同时也减少了重复的代码。

注意事项:
  • 通过包扫描或类型别名配置的别名是全局的,可以在所有的映射文件中使用。
  • 在同一个配置文件中可以多次使用 typeAliases 元素进行配置,每个元素可以包含多个包扫描、类型别名或自定义别名解析器的配置。
  • 这些配置方式使得在 MyBatis 中使用 Java 类型更加方便和简洁,可以减少在映射文件中写入完整类名的工作量。

3. environments 元素

在 MyBatis 的核心配置文件中,environments 元素用于配置 MyBatis 的不同运行环境。它可以包含一个或多个 environment 元素,每个 environment 元素定义了一个具体的运行环境。

下面是 environments 元素的配置详解:
<environments default="environmentId">
  <environment id="environmentId">
    <!-- 事务管理器配置 -->
    <transactionManager type="transactionManagerType"/>

    <!-- 数据源配置 -->
    <dataSource type="dataSourceType">
      <!-- 数据库连接相关配置 -->
    </dataSource>
  </environment>
</environments>

environments 元素中各个属性和子元素说明如下:
  • default 属性:指定默认的运行环境标识符(environmentId)。当没有指定具体的运行环境时,将使用默认的运行环境。
  • environment 元素:定义一个具体的运行环境。它包含以下子元素:
  • id 属性:运行环境的标识符,需要在 default 属性中指定一个标识符作为默认运行环境。
  • transactionManager 元素:用于配置事务管理器。它有一个 type 属性,用于指定事务管理器的类型,可以是 MyBatis 提供的一些事务管理器的实现类。
  • dataSource 元素:用于配置数据源。它有一个 type 属性,用于指定数据源的类型,可以是 MyBatis 提供的一些数据源的实现类。在 dataSource 元素下可以配置数据库连接相关的信息,如连接池类型、连接 URL、用户名、密码等。

通过以上的配置,可以在 environments 元素中定义多个不同的运行环境,每个运行环境可以有自己的事务管理器和数据源。在具体的映射文件或者注解中,可以通过指定运行环境的标识符来选择使用哪个运行环境。如果没有显式指定运行环境,则使用默认的运行环境。

以下是一个示例配置:
<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
      <property name="username" value="root"/>
      <property name="password" value="password"/>
    </dataSource>
  </environment>
  <environment id="production">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://production-server:3306/mybatisdb"/>
      <property name="username" value="admin"/>
      <property name="password" value="secret"/>
    </dataSource>
  </environment>
</environments>

在上面的示例中,定义了两个运行环境:development 和 production。development 运行环境使用本地 MySQL 数据库作为数据源,而 production 运行环境使用远程服务器上的 MySQL 数据库作为数据源。两个运行环境都使用 JDBC 事务管理器。

通过配置不同的运行环境,可以根据需要在不同的环境中使用不同的数据库连接和事务管理策略,以满足开发、测试和生产等不同阶段的需求。在具体的操作中,可以通过指定环境标识符来选择使用对应的运行环境。

请注意,以上仅是 environments 元素的配置详解,实际使用 MyBatis 还需要配置其他元素,如映射器(mappers)、插件(plugins)等,以完成整个 MyBatis 的配置。

4. mappers 元素

在 MyBatis 的核心配置文件中,mappers 元素用于配置映射器(Mapper)的位置和加载方式。下面是 mappers 元素的配置详解:

4.1 mapper 子元素

我们可以在 <mappers> 元素中,使用 <mapper> 元素来指定映射器的位置,可以是类路径下
   <mappers>
       <mapper resource="com/example/UserMapper.xml"/>
       <mapper class="com.example.OrderMapper"/>
   </mappers>

在上述示例中,通过 <mapper> 元素可以指定映射器的位置,这个位置既可以是 XML 文件的路径也可以是映射器接口的类路径。

mapper 子元素下可以设置多个属性,如下表。

属性 说明 示例
Resource 属性 使用 resource 属性可以指定一个外部的 XML 配置文件来加载映射器
<mappers>
  <mapper resource="com/example/mapper/MyMapper.xml"/>
</mappers>

上述配置将会加载 com/example/mapper/MyMapper.xml 文件作为映射器。
Class 属性 使用 class 属性可以直接指定一个映射器接口的类路径。
<mappers>
  <mapper class="com.example.mapper.MyMapper"/>
</mappers>

上述配置将会扫描并加载 com.example.mapper.MyMapper 接口对应的 XML 配置文件。
URL 属性 使用 url 属性可以指定一个 URL 地址,MyBatis 将会从该 URL 加载映射器
<mappers>
  <mapper url="file:///path/to/MyMapper.xml"/>
</mappers>

上述配置将会加载 file:///path/to/MyMapper.xml 文件作为映射器。
除了上述属性配置外,我们还可以使用 <mapper> 元素的子元素来配置映射器。例如:
<mappers>
  <mapper>
    <package name="com.example.mapper"/>
    <class name="com.example.mapper.AnotherMapper"/>
    <resource>com/example/mapper/MyMapper.xml</resource>
  </mapper>
</mappers>

上述配置通过子元素的方式同时指定了要扫描的包、要加载的类以及要加载的 XML 配置文件。

使用 mappers 元素可以根据需要加载映射器,它提供了多种灵活的配置方式来满足不同的需求。我们可以根据自己的项目结构和组织方式选择适合的配置方式来加载映射器。

5. settings 元素

<settings> 元素用于配置 MyBatis 的全局属性。可以设置属性的开启与关闭、缓存配置、日志实现等。示例:
<settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="logImpl" value="LOG4J"/>
</settings>

6. plugin 元素

<plugin> 元素用于配置 MyBatis 插件。插件可以拦截 MyBatis 的方法调用,对其进行增强或修改。示例:
<plugins>
    <plugin interceptor="com.example.MyPlugin">
        <property name="property1" value="value1"/>
        <property name="property2" value="value2"/>
    </plugin>
</plugins>

在上述示例中,通过 <plugin> 元素配置了一个名为 com.example.MyPlugin 的插件,并为插件指定了一些属性。

这些是 MyBatis 核心配置文件的主要元素和配置选项。通过合理配置核心配置文件,可以实现数据源、映射器、插件等的配置,从而实现对关系数据库的操作。

声明:《MyBatis系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。