MyBatis之properties配置

白玉 IT哈哈
这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如:

<properties resource="org/mybatis/example/config.properties">  <property name="username" value="dev_user"/>  <property name="password" value="F2Fa3!33TYyg"/></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 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。
属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中。例如:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);// ... or ...SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。

然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。

最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

从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>

你可以使用 ":" 作为属性键(e.g. db:username) 或者你也可以在sql定义中使用 OGNL 表达式的三元运算符(e.g. ${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>

更多相关文章

  1. Selenium3自动化测试【12】元素定位认知
  2. jQuery——将title属性用作悬停的文本,但只在同一父类中使用。
  3. Jquery对选取到的元素显示指定的长度,对于的字符串用“...”显示
  4. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元
  5. scrollTop到溢出滚动div中的活动元素
  6. jQuery使用之(四)处理页面的表单元素
  7. jQuery遍历祖先元素:parentsUntil
  8. jQuery入门(2) 获取元素和DOM转换
  9. 用Jquery控制元素的上下移动 实现排序功能

随机推荐

  1. Android——文件操作
  2. android studio导入jar 后产生的 gradle
  3. 用ant实现自动打包android(二) -- android
  4. Android禁止Edittext弹出软件盘,光标依然
  5. Android Studio编译中“png-cruncher_*”
  6. Android 判断是否能真正上网
  7. Android学习笔记 --- Terms and installa
  8. Android(安卓)开发中Layout_Margin与padd
  9. Android获取程序路径 (/data/data/appname
  10. Android之获取手机信息