0. 工程搭建
我们还是先来搭建一个新的工程吧,跟之前的区分一下。工程名我们就叫它 mybatis-02-configuration
吧,导入的依赖跟上一章一样,然后把上一章的那些代码原样拷贝下来,我们继续拿来用。
拷贝完成后的工程结构及文件应该是这样的:
OK ,我们开始学习。
全局配置文件一览
MyBatis 的全局配置文件,自上而下的编写内容如下:
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
小册不会把这里面所有的内容都讲解,而是只选择一些我们平时开发中使用比较多,以及相对来讲比较重要的配置讲解。
1. properties-属性
properties 属性,它的作用是定义全局配置变量,并且它可以加载外部化的 properties 配置文件。下面我们来简单演示一下 properties 的使用。
1.1 简单使用
借助 IDE ,在 xml 中编写 <properties>
时,下面就会发现只有一个 <property>
标签,而且是标准的 key-value 格式:
<properties>
<property name="" value=""/>
</properties>
所以我们可以来试着提取一下下面数据源的几个配置:
<properties>
<property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
下面的数据源在引用配置时,只需要使用 ${}
的表达式引用即可。
配置之后,重新运行之前留下的那个 MyBatisApplication6
,发现一切正常,说明这样配置是没有任何问题的。
1.2 加载外部化配置文件
如果仅仅是为了在上面定义 property 的话,那这未免显得有那么一点点鸡肋,我们也没必要把它单独拎出来讲。<properties>
标签是可以直接声明 resource 或者 url 来加载外部化配置文件的。下面我们也简单演示一下。
先把 properties 文件编写出来:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
然后,使用 <properties>
标签把这个 properties 文件加载进来即可:
<properties resource="jdbc.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
是不是比上面的方式简单多了?所以这种写法才是我们平时使用相对比较多的方式。重新运行 MyBatisApplication6
,程序仍然可以正常运行,说明这样写也是完全没问题的。
注意,resource 或者 url 只能声明一个文件, MyBatisApplication6
,。如果真的需要一次性加载多个外部化配置文件,下面我们马上会说。
另外还有一点,resource 跟 url 是互斥的,二者只能取其一,如果两个都定义,MyBatis 都没办法初始化,会抛出异常!所以我们只需要声明一个属性即可。
1.3 加载多个外部化配置文件
如果真的需要一次性加载多个外部化配置文件,使用 xml 配置的方式是无法实现的。不过我们可以换一种思路来实现:Properties
这个类是可以加载多个 properties 文件到一个对象中的,所以我们可以基于这个思路来实现。
先来造两个外部化配置文件吧,这次我们把数据源连接的几个属性拆到两个文件中:(越写越感觉奇怪,这例子有点勉强哈,,,)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
然后,全局配置文件中的 <properties>
可以先暂时屏蔽掉了。
最后,我们来试试编程式加载这些 properties 文件:
public class LoadPropertiesApplication {
public static void main(String[] args) throws Exception {
InputStream xml = Resources.getResourceAsStream("mybatis-config.xml");
// 使用Properties的API加载这些properties文件
Properties properties = new Properties();
properties.load(Resources.getResourceAsStream("jdbc1.properties"));
properties.load(Resources.getResourceAsStream("jdbc2.properties