# 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>
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>
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
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>
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>
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>
2
3
4
5
6
7
8
9
这样在 SQL 映射的 Mapper.xml 文件中,就可以使用别名了:
<!-- 定义查询所有用户的sql -->
<select id="selectAll" resultType="User">
    select * from tb_user
</select>
2
3
4
别名不区分大小写。
上面设置别名的方式得一个一个设置,我们还可以以包为单位,设置包下所有类型的别名(不区分大小写)。
<typeAliases>
    <package name="com.foooor.mybatis.pojo"/>
</typeAliases>
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>
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>
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 来管理就好了。
← 02-HelloWorld 04-增删改查 →
