MyBatis 教程

MyBatis 配置 properties 标签

MyBatis 配置中,<properties> 标签用来引入一个属性文件或者定义多个属性,然后在配置文件中使用  ${} 方式进行引用。我们先看看标签 DTD 定义吧,如下:

<!ELEMENT properties (property*)>
<!ATTLIST properties
resource CDATA #IMPLIED
url CDATA #IMPLIED
>

<!ELEMENT property EMPTY>
<!ATTLIST property
name CDATA #REQUIRED
value CDATA #REQUIRED
>

根据上面DTD定义得知,<properties> 拥有两个属性和一个 <property> 子标签。其中:

  • resource:从本地文件系统载入属性文件,如:resource="database.properties",将从项目 classpath 路径下面加载 database.properties 属性文件。

  • url:可以从互联网加载属性文件,如:url="http://www.hxstrive.com/data/database.properties" 将从网络位置下载属性文件。

<properties>标签是外部化的,可替代的属性,这些属性也可以配置在典型的 Java 属性配置文件中,或者通过 properties 元素的子元素来传递。例如:

<properties resource="org/mybatis/example/config.properties">
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</properties>

其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。比如:

<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>

这个例子中的 username 和 password 将会由 properties 元素中设置的值来替换。driver 和 url 属性将会从包含进来的 config.properties 文件中的值来替换。

属性也可以被传递到 SqlSessionBuilder.build() 方法中。例如:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, props);
// 或
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, props);

如果在这些地方,属性多于一个的话,MyBatis 按照如下的顺序加载它们:

  • 在 properties 元素体内指定的属性首先被读取。

  • 从类路径下资源或 properties 元素的 url 属性中加载的属性第二被读取,它会覆盖已经存在的完全一样的属性。

  • 作为方法参数传递的属性最后被读取,它也会覆盖任一已经存在的完全一样的属性,这些属性可能是从 properties 元素体内和资源/url 属性中加载的。

因此,最高优先级的属性是那些作为方法参数的,然后是资源/url 属性,最后是 properties 元素中指定的属性。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号