# 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-增删改查 →