MyBatis 3 XML配置-數(shù)據(jù)庫廠商標識

2022-04-07 15:21 更新

數(shù)據(jù)庫廠商標識(databaseIdProvider)

MyBatis 可以根據(jù)不同的數(shù)據(jù)庫廠商執(zhí)行不同的語句,這種多廠商的支持是基于映射語句中的 ?databaseId屬性。 MyBatis 會加載帶有匹配當前數(shù)據(jù)庫 ?databaseId屬性和所有不帶 ?databaseId ?屬性的語句。 如果同時找到帶有 ?databaseId ?和不帶 ?databaseId ?的相同語句,則后者會被舍棄。 為支持多廠商特性,只要像下面這樣在 mybatis-config.xml 文件中加入 ?databaseIdProvider ?即可:

<databaseIdProvider type="DB_VENDOR" />

?databaseIdProvider ?對應的 ?DB_VENDOR ?實現(xiàn)會將 ?databaseId ?設置為 ?DatabaseMetaData#getDatabaseProductName()? 返回的字符串。 由于通常情況下這些字符串都非常長,而且相同產(chǎn)品的不同版本會返回不同的值,你可能想通過設置屬性別名來使其變短:

<databaseIdProvider type="DB_VENDOR">
  <property name="SQL Server" value="sqlserver"/>
  <property name="DB2" value="db2"/>
  <property name="Oracle" value="oracle" />
</databaseIdProvider>

在提供了屬性別名時,?databaseIdProvider ?的 ?DB_VENDOR ?實現(xiàn)會將 ?databaseId ?設置為數(shù)據(jù)庫產(chǎn)品名與屬性中的名稱第一個相匹配的值,如果沒有匹配的屬性,將會設置為 “?null?”。 在這個例子中,如果 ?getDatabaseProductName()? 返回“?Oracle (DataDirect)?”,?databaseId將被設置為“?oracle?”。

你可以通過實現(xiàn)接口 ?org.apache.ibatis.mapping.DatabaseIdProvider? 并在 ?mybatis-config.xml? 中注冊來構建自己的 ?DatabaseIdProvider?:

public interface DatabaseIdProvider {
  default void setProperties(Properties p) { // 從 3.5.2 開始,該方法為默認方法
    // 空實現(xiàn)
  }
  String getDatabaseId(DataSource dataSource) throws SQLException;
}


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號