Mybatis配置-属性(properties)

这些是可外部化、可替换的属性,可以在典型的Java Properties文件实例中进行配置,或者通过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>

 在这个例子中,用户名和密码将被 properties 元素中设置的值替换。驱动程序和url属性将被包含在config.properties文件中的值所替换。这为配置提供了很多选项。

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

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

// ... or ...

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

如果一个属性同时存在于这些地方,MyBatis会按照以下顺序加载它们:

  • 首先读取在properties元素体内指定的属性;
  •  其次读取从properties元素的classpath资源或url属性加载的属性,并覆盖已经指定的重复属性;
  • 最后读取作为方法参数传递的属性,并覆盖可能从properties体和资源/URL属性加载的重复属性。

因此,最高优先级的属性是作为方法参数传递的属性,其次是资源/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>

 这将与属性键中的冒号字符(例如: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>

猜你喜欢

转载自blog.csdn.net/hay23455/article/details/135011365