Mybatis 的配置文件,有两种:
一、Mybatis 全局配置文件(主配置文件):
起名:不固定,但一般起名要见名知意 ——> mybatis-config.xml
路径:classpath 的根路径
配置内容:
0、全局的配置信息;
1、属性配置信息;
2、插件配置信息;
3、环境配置信息(连接池 + 事务);
4、关联映射文件;
二、Mybatis 映射文件(Mapper 文件)
起名:不固定,但一般也要见名知意 ——> XxxMapper.xml,是哪一个对象的映射文件,如 StudentMapper.xml;
配置内容:
0、编写增删改查的 SQL,把 SQL 存放到配置文件中的 insert | update | delete | select 元素中去;
1、结果集映射:解决表中的列和对象中属性不匹配的问题;
2、缓存配置;
从 XML 中构建 SqlSessionFactory
MyBatis 的官方文档有说到:
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
接下来,在项目的根路径(resources 目录)下新建 mybatis-config.xml 文件。
XML 需要导入 dtd 约束,约束指向网络路径:
在电脑联网的情况下,会自动缓存路径文件到本地,提供提示功能;
不联网的情况下,需要在 XML Catalog 中配置 dtd 文件位置;
从官方文档中拷贝 dtd 约束文件:
< !DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"


环境配置(environments):
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;
事务管理器(transactionManager):
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。
事务管理器(transactionManager)中的 type 如果使用的是 JDBC,其实底层用的是 JdbcTransactionFactory 这个类(JDBC 事务工厂)。
通过 Configuration 这个类可以看出:

从配置文件中可以看到,这两种事务管理器类型都不需要设置任何属性。
因为它们其实是类型别名,换句话说,我们可以使用 TransactionFactory 接口的实现类的完全限定名或类型别名代替它们。(JdbcTransactionFactory 实现了 TransactionFactory 接口)
数据源(dataSource):
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
UNPOOLED– 这个数据源没有使用连接池,实现只是每次被请求时打开和关闭连接。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
JNDI – 我们不是很熟悉,一般是在 EJB 环境或这类容器中使用的。
连接池还需要配置子元素,property 属性,如下图:
< !-- 数据源 -->
< dataSource type="POOLED">
< property name="driver" value="com.mysql.jdbc.Driver"/>
< property name="url" value="jdbc:mysql://localhost:3306/mybatis-demo"/>
< property name="username" value="root"/>
< property name="password" value="123456"/>
< /dataSource>
为什么要配置 driver、url 等这些属性呢?
数据源中使用的类型 type 是 "POOLED",从 Configuration 类中,我们知道,它是 PooledDataSourceFactory.class 这个类的别名。
它里边需要 new 一个连接池对象:
public class PooledDataSourceFactory extends UnpooledDataSourceFactory {
public PooledDataSourceFactory() { this.dataSource = new PooledDataSource(); }
}
查看 PooledDataSource 连接池这个类,发现里边有 setDriver、setUrl 等方法。

需要注意的是:后面使用 Spring 框架的时候,事务管理器和连接池都是交给 Spring 来管理的,所以在 Mybatis 中就不需要配置这两个东西了。
配好连接池后,接下来,我们需要配置映射器 Mapper。
Mapper.xml 文件是用来写 SQL 语句的,我们需要告诉 Mybatis 到哪里去找到这些语句。
所以,我们需要在 Mybatis 主配置文件中配置 < mappers>< /mappers> 标签:
< mappers>
< mapper resource="com/mxz/mybatis/mapper/StudentMapper.xml"/>
< /mappers>
配置前,我们需要在 Sources Root 目录下创建 mapper 包,并新建 StudentMapper.xml 文件。那映射文件该怎么写呢?
首先,跟主配置文件一样,我们需要先引入 dtd 约束文件。
其次,后面所写的所有 SQL 语句都需要放到 < mapper>< /mapper> 标签下,并且用对应的标签括起来,如 < select>< /select> 等。

select 元素:专门用做写查询的 SQL,类似的 insert、update、delete 元素分别表示做插入、更新、删除的 SQL(其实这些元素标签写哪一个并不影响结果,影响结果的只是通过 namespace + id 来索引到的所写的 SQL 语句,但为了专业,还是建议写成对应的标签)。
id 属性:做唯一标识,用来表示某一条 SQL 语句,id 属性和 mapper 的namespace 唯一的表示了应用中的某一条 SQL 语句。
parameterType 属性:表示执行该 SQL 语句需要的参数的类型,建议不写, MyBatis 可以通过类型处理器(TypeHandler) 推断出来。
resultType 属性:把结果集中的每一行数据封装成什么类型的对象。
到此,Mybatis 的两种配置文件就介绍完了。
tips:查看官方文档是学习一门新语言最有效的方法。
系列预告:Mybatis 系列 3:第一个测试用例
关注「阿泽学长」,解锁更多干货:
