MyBatis配置文件——<properties/>配置笔记

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按照下面顺序来加载:

  1. 在Properties元素体内指定的属性首先被读取;
  2. 根据properties元素中resource属性读取类路径下的属性文件,或者根据url属相指定的路径读取属性文件,并覆盖已读取的同名属性;
  3. 读取作为方法参数传递的属性,并覆盖已读取的同名属性;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值