W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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;
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: