MyBatis配置XML文件的层次结构:
注意:这些层次是不能够颠倒顺序的,如果颠倒顺序,MyBatis在解析XML文件的时候就会出现异常。
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- 配置 -->
<properties/> <!-- 属性 -->
<settings/> <!-- 设置 -->
<typeAliases/> <!-- 类型命名 -->
<typeHandlers/> <!-- 类型处理器 -->
<objectFactory/> <!-- 对象工厂 -->
<plugins/> <!-- 插件 -->
<environments> <!-- 配置环境 -->
<envoronment> <!-- 环境变量 -->
<transactionManager/> <!-- 事务处理器 -->
<dataSource/> <!-- 数据源 -->
</envoronment>
</environments>
<databaseIdProvider/> <!-- 数据库厂商标识 -->
<mappers/> <!-- 映射器 -->
</configuration>
properties的配置
properties是一个配置属性的元素,让我们能在配置文件的上下文中使用这些属性。
MyBatis提供了三种配置properties的方式:
- propertie子元素配置
- 引用properties配置文件
- 程序参数传递
1.1 propertie子元素配置
propertie子元素的配置方法很简单:
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="learn"/>
</properties>
配置完这些属性信息之后,就可以在XML文件的上下文中使用,如:
<dataSource type="POLLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
1.2 引用properties配置文件
很多时候,我们更喜欢使用单独的properties配置文件配置属性值,以方便我们在多个配置文件中重复使用它们,也方便日后维护和随时修改。
加入我们现在有一个properties配置文件(jdbc.properties),内容如下:
#数据库配置文件
dirver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=learn
我们就可以通过下面的方式将器引入MyBatis的配置中去:
<properties resource="jdbc.properties" />
1.3 程序参数传递
应用场景:
在实际工作中,我们经常遇到这样的问题:系统是由运维人员去配置的,生产数据库的账户和密码对于开发者来说是保密的,而且为了安全,运维人员要求对配置文件中的数据库用户和密码进行加密,这样我们的配置文件往往配置的是加密过后的数据库信息,而无法通过加密的字符串去链接数据库,这个时候可以通过编码的形式来满足我们遇到的场景。
假设我们现在有一个jdbc.properties文件,其中username和password两个属性使用了加密的字符串,我们需要在生成SqlSessionFactory之前将它转化为明文,而系统已经提供了解密的方法decode(str),下面显示了如何使用程序将jdbc的配置应用于SqlSessionFactory的创建:
InputStream cfgStream = null;
Reader cfgReader = null;
InputStream proStream = null;
Reader proReader = null;
Properties properties = null;
try {
// 读入配置文件流
cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
cfgReader = new InputStreamReader(cfgStream);
// 读入配置文件流
proStream = Resources.getResourceAsStream("jdbc.properties");
proReader = new InputStreamReader(proStream);
properties = new Properties();
properties.load(proReader);
// 解密为明文
properties.setProperty("username", decode(properties.getProperty("usrname")));
properties.serProperty("password", decode(properties.getProperty("password"));
} catch(IOExecption ex) {
...
}
1.4 三种方式优先级
MyBatis支持三种配置方式同事出现,并且属性还可以重复配置。这三种存在优先级的,MyBatis按照下面顺序来加载:
- 在Properties元素体内指定的属性首先被读取;
- 根据properties元素中resource属性读取类路径下的属性文件,或者根据url属相指定的路径读取属性文件,并覆盖已读取的同名属性;
- 读取作为方法参数传递的属性,并覆盖已读取的同名属性;
1220

被折叠的 条评论
为什么被折叠?



