# MyBatis教程 - 3 MyBatis核心配置文件

下面讲解一下 MyBatis 核心配置文件中的配置。

现在因为没有在 Spring 中集成 MyBatis,所以需要用到 MyBatis 核心配置文件,而如果在 Spring 中集成 MyBatis,就不需要这个文件了,这些配置完全可以交给 Spring 来管理。

所以这里了解一下 MyBatis 核心配置文件中的配置即可。

核心配置文件中的配置,需要按照指定的顺序,否则会报错。

需要按照下面的顺序,根据需要选择性配置:

properties, settings, typeAliases, typeHandlers, objectFactory, objectWrapperFactory, reflectorFactory, plugins, environments, databaseIdProvider, mappers

# 3.1 environments配置

通过 <environments> 可以设置多个环境的数据源配置,并指定使用哪个配置。

<!-- 设置 MyBatis 使用的环境,当前使用的是开发环境 -->
<environments default="development">
    <!-- 定义开发环境 -->
    <environment id="development">
        <!--
            事务管理器,可以设置为:JDBC、MANAGED
            JDBC:使用了 JDBC 原生的事务管理方式,需要手动提交和回滚事务
            MANAGED:表示被管理,可以使用 Spring 的事务管理
        -->
        <transactionManager type="JDBC"/>

        <!--
            定义数据源,type 可以设置为:POOLED、UNPOOLED、JNDI
            POOLED:使用连接池管理数据库连接
            UNPOOLED:不使用连接池管理数据库连接
            JNDI:使用 JNDI 数据源管理数据库连接
        -->
        <dataSource type="POOLED">
            <!-- 数据库驱动 -->
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <!-- 数据库连接地址 -->
            <property name="url" value="jdbc:mysql://localhost:3306/foooor_db"/>
            <!-- 数据库用户名 -->
            <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://www.foooor.com:3306/foooor_db"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 3.2 settings配置

<settings> 标签允许你自定义 MyBatis 的行为方式,通过设置不同的属性来控制其执行过程中的各种特性。

<!-- 设置 -->
<settings>
    <!-- 驼峰命名法 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
1
2
3
4
5

在 HelloWorld 中配置了字段映射采用驼峰命名法。

# 3.3 properties配置

在上面的数据库连接信息是写死在配置文件中的,我们可以将这些信息定义在配置文件中。

例如在 src/main/resources 下定义一个 jdbc.properties,然后定义属性如下:

jdbc.properties

# 开发环境配置
dev.jdbc.driver=com.mysql.cj.jdbc.Driver
dev.jdbc.url=jdbc:mysql://localhost:3306/foooor_db
dev.jdbc.username=root
dev.jdbc.password=root

# 生产环境配置
prod.jdbc.driver=com.mysql.cj.jdbc.Driver
prod.jdbc.url=jdbc:mysql://www.foooor.com:3306/foooor_db
prod.jdbc.username=root
prod.jdbc.password=123456
1
2
3
4
5
6
7
8
9
10
11

在 mybatis-config.xml 中就可以使用 <properties> 标签引入配置文件,然后就可以使用 ${} 使用属性配置文件中的属性:

<properties resource="jdbc.properties" />

<!-- 设置 MyBatis 使用的环境,当前使用的是开发环境 -->
<environments default="development">
    <!-- 定义开发环境 -->
    <environment id="development">
        <!--
            事务管理器,可以设置为:JDBC、MANAGED
            JDBC:使用了 JDBC 原生的事务管理方式,需要手动提交和回滚事务
            MANAGED:表示被管理,可以使用 Spring 的事务管理
        -->
        <transactionManager type="JDBC"/>

        <!--
            定义数据源,type 可以设置为:POOLED、UNPOOLED、JNDI
            POOLED:使用连接池管理数据库连接
            UNPOOLED:不使用连接池管理数据库连接
            JNDI:使用 JNDI 数据源管理数据库连接
        -->
        <dataSource type="POOLED">
            <!-- 数据库驱动 -->
            <property name="driver" value="${dev.jdbc.driver}"/>
            <!-- 数据库连接地址 -->
            <property name="url" value="${dev.jdbc.url}"/>
            <!-- 数据库用户名 -->
            <property name="username" value="${dev.jdbc.username}"/>
            <!-- 数据库密码 -->
            <property name="password" value="${dev.jdbc.password}"/>
        </dataSource>
    </environment>

    <!-- 定义生产环境的数据库连接信息 -->
    <environment id="production">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${prod.jdbc.driver}"/>
            <property name="url" value="${prod.jdbc.url}"/>
            <property name="username" value="${prod.jdbc.username}"/>
            <property name="password" value="${prod.jdbc.password}"/>
        </dataSource>
    </environment>
</environments>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 3.4 typeAliases配置

typeAliases 可以设置类型别名。

前面在 SQL 映射文件中,resultType 返回类型需要写全类型,在开发中,我们会有很多的查询方法,都这么写,稍微有点麻烦。

<!-- 定义查询所有用户的sql -->
<select id="selectAll" resultType="com.foooor.mybatis.pojo.User">
    select * from tb_user
</select>
1
2
3
4

可以通过 typeAliases 设置别名:

<typeAliases>
    <typeAlias type="com.foooor.mybatis.pojo.User" alias="User"/>
</typeAliases>

<!---------------------------------->
<typeAliases>
    <!-- 也可以不指定alias属性,默认使用类名 -->
    <typeAlias type="com.foooor.mybatis.pojo.User" />
</typeAliases>
1
2
3
4
5
6
7
8
9

这样在 SQL 映射的 Mapper.xml 文件中,就可以使用别名了:

<!-- 定义查询所有用户的sql -->
<select id="selectAll" resultType="User">
    select * from tb_user
</select>
1
2
3
4

别名不区分大小写。


上面设置别名的方式得一个一个设置,我们还可以以包为单位,设置包下所有类型的别名(不区分大小写)。

<typeAliases>
    <package name="com.foooor.mybatis.pojo"/>
</typeAliases>
1
2
3

# 3.5 mappers配置

在开发中,我们可能会针对每个数据库表创建一个 XxxMapper.java 接口和对应的 XxxMapper.xml,所以这些文件会有很多

然后在核心配置文件中配置 XxxMapper.xml,如果每一个都需要配置,会很麻烦,这个也是可以以包为单位进行引入的。

但是需要注意:

  • XxxMapper.xml 在 resources 下的目录需要和 XxxMapper.java 的包名一致;
  • 接口文件需要和 SQL 映射文件名称一致;
<!-- 定义 MyBatis 的映射文件所在的位置 -->
<mappers>
    <package name="com.foooor.mybatis.mapper"/>
</mappers>
1
2
3
4

那么 XxxMapper.xml 所在位置如下:

# 3.6 上面的完整配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 加载外部配置文件 -->
    <properties resource="jdbc.properties" />

    !-- 设置 -->
    <settings>
        <!-- 驼峰命名法 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
  
    <!-- 定义别名 -->
    <typeAliases>
        <package name="com.foooor.mybatis.pojo"/>
    </typeAliases>

    <!-- 设置 MyBatis 使用的环境,当前使用的是开发环境 -->
    <environments default="development">
        <!-- 定义开发环境 -->
        <environment id="development">
            <!--
                事务管理器,可以设置为:JDBC、MANAGED
                JDBC:使用了 JDBC 原生的事务管理方式,需要手动提交和回滚事务
                MANAGED:表示被管理,可以使用 Spring 的事务管理
            -->
            <transactionManager type="JDBC"/>

            <!--
                定义数据源,type 可以设置为:POOLED、UNPOOLED、JNDI
                POOLED:使用连接池管理数据库连接
                UNPOOLED:不使用连接池管理数据库连接
                JNDI:使用 JNDI 数据源管理数据库连接
            -->
            <dataSource type="POOLED">
                <!-- 数据库驱动 -->
                <property name="driver" value="${dev.jdbc.driver}"/>
                <!-- 数据库连接地址 -->
                <property name="url" value="${dev.jdbc.url}"/>
                <!-- 数据库用户名 -->
                <property name="username" value="${dev.jdbc.username}"/>
                <!-- 数据库密码 -->
                <property name="password" value="${dev.jdbc.password}"/>
            </dataSource>
        </environment>

        <!-- 定义生产环境的数据库连接信息 -->
        <environment id="production">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${prod.jdbc.driver}"/>
                <property name="url" value="${prod.jdbc.url}"/>
                <property name="username" value="${prod.jdbc.username}"/>
                <property name="password" value="${prod.jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 定义 MyBatis 的映射文件所在的位置 -->
    <mappers>
        <package name="com.foooor.mybatis.mapper"/>
    </mappers>

</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

上面的配置了解一下,后面在 Spring 中集成的话,是不需要 mybatis-config.xml 的,交由 Spring 来管理就好了。