MyBatis 3 XML配置-數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)

2022-04-07 15:21 更新

數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)(databaseIdProvider)

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

<databaseIdProvider type="DB_VENDOR" />

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

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

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

你可以通過(guò)實(shí)現(xiàn)接口 ?org.apache.ibatis.mapping.DatabaseIdProvider? 并在 ?mybatis-config.xml? 中注冊(cè)來(lái)構(gòu)建自己的 ?DatabaseIdProvider?:

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)