MyBatis 3 XML配置-屬性

2022-04-07 14:07 更新

屬性(properties)

這些屬性可以在外部進(jìn)行配置,并可以進(jìn)行動態(tài)替換。你既可以在典型的 Java 屬性文件中配置這些屬性,也可以在properties元素的子元素中設(shè)置。例如:

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>

設(shè)置好的屬性可以在整個(gè)配置文件中用來替換需要動態(tài)配置的屬性值。比如:

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

這個(gè)例子中的 ?username和 ?password將會由 ?properties元素中設(shè)置的相應(yīng)值來替換。 ?driver和 ?url屬性將會由 ?config.properties? 文件中對應(yīng)的值來替換。這樣就為配置提供了諸多靈活選擇。

也可以在 ?SqlSessionFactoryBuilder.build() ?方法中傳入屬性值。例如:

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

// ... 或者 ...

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

如果一個(gè)屬性在不只一個(gè)地方進(jìn)行了配置,那么,MyBatis 將按照下面的順序來加載:

  1. 首先讀取在 ?properties元素體內(nèi)指定的屬性。
  2. 然后根據(jù) ?properties元素中的resource屬性讀取類路徑下屬性文件,或根據(jù) url屬性指定的路徑讀取屬性文件,并覆蓋之前讀取過的同名屬性。
  3. 最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋之前讀取過的同名屬性。

因此,通過方法參數(shù)傳遞的屬性具有最高優(yōu)先級,?resource/url? 屬性中指定的配置文件次之,最低優(yōu)先級的則是 ?properties元素中指定的屬性。

從 MyBatis 3.4.2 開始,你可以為占位符指定一個(gè)默認(rèn)值。例如:

<dataSource type="POOLED">
  <!-- ... -->
  <property name="username" value="${username:ut_user}"/> <!-- 如果屬性 'username' 沒有被配置,'username' 屬性的值將為 'ut_user' -->
</dataSource>

這個(gè)特性默認(rèn)是關(guān)閉的。要啟用這個(gè)特性,需要添加一個(gè)特定的屬性來開啟這個(gè)特性。例如:

<properties resource="org/mybatis/example/config.properties">
  <!-- ... -->
  <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 啟用默認(rèn)值特性 -->
</properties>

如果你在屬性名中使用了 ?":"? 字符(如:?db:username?),或者在 SQL 映射中使用了 ?OGNL表達(dá)式的三元運(yùn)算符(如:? ${tableName != null ? tableName : 'global_constants'}?),就需要設(shè)置特定的屬性來修改分隔屬性名和默認(rèn)值的字符。例如:

<properties resource="org/mybatis/example/config.properties">
  <!-- ... -->
  <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默認(rèn)值的分隔符 -->
</properties>
<dataSource type="POOLED">
  <!-- ... -->
  <property name="username" value="${db:username?:ut_user}"/>
</dataSource>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號