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