前言
MyBatis支持在配置文件和mapper文件中使用占位符,而替换这些占位符的系统属性可以通过引入外部配置文件、xml配置和通过接口传入。
提示:以下是本篇文章正文内容,下面案例可供参考
一、系统属性设置方式
1、外部配置文件
在mybatis的配置文件中如下配置即可
<properties resource="org/mybatis/example/config.properties">
</properties>
或者
<properties url="file:./src/test/java/org/apache/ibatis/builder/jdbc.properties">
</properties>
2、xml配置
在mybatis的配置文件中如下配置即可
<properties>
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
3、接口设置
SqlSessionFactory factory =
sqlSessionFactoryBuilder.build(reader, props);
// ... or ...
SqlSessionFactory factory =
new SqlSessionFactoryBuilder.build(reader, environment, props);
二、以上方式加载优先级问题
如果一个属性存在于多个位置中(通过以上多种方式配置),则MyBatis将按以下顺序加载它们:
1. 首先读取properties元素主体中指定的属性(xml配置),
2. 从类路径资源或properties元素的url属性加载的属性将被读取,并覆盖已经指定的所有重复属性,(外部配置文件)
3. 作为方法参数传递的属性将最后读取,并覆盖可能已从属性主体和资源/ URL属性加载的所有重复属性(接口设置)。
因此,优先级最高的属性是作为方法参数传入的属性(接口设置),其后是resource / url属性(外部配置文件),最后是properties元素主体中指定的属性(xml配置)。
三、占位符指定默认值注意事项
从MyBatis 3.4.2版本开始,可以在通过占位符引用系统配置的时候设置默认值,如下所示
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${username:ut_user}"/> <!-- If 'username' property not present, username become 'ut_user' -->
</dataSource>
默认情况下禁用此功能。 如果在占位符中指定默认值,则应通过添加以下特殊属性来启用此功能
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- Enable this feature -->
</properties>
但是,这将与SQL定义上的属性键(例如db:username
)或这OGNL表达式的三元运算符(例如$ {tableName!= null?tableName:'global_constants'}
)中的“:”字符冲突。 如果使用任何一个并想要默认属性值,则必须通过添加此特殊属性来更改默认值分隔符
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- Change default value of separator -->
</properties>
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${db:username?:ut_user}"/>
</dataSource>
所以系统配置enable-default-value
需要慎重。
总结
MyBatis支持多种方式配置系统属性,其中优先级最高的属性是作为方法参数传入的属性(接口设置),其后是resource / url属性(外部配置文件),最后是properties元素主体中指定的属性(xml配置)。