多數(shù)據(jù)庫(kù)執(zhí)行不同SQL語(yǔ)句的支持

相關(guān)文章:配置多個(gè)environment環(huán)境

在一個(gè)項(xiàng)目中如果要支持多個(gè)不同廠商的數(shù)據(jù)庫(kù),怎么辦?
首先,連接不同數(shù)據(jù)庫(kù)的驅(qū)動(dòng)要有。
配置文件mybatis-config.xml的代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--屬性文件配置-->
    <properties resource="db.properties"></properties>
    <!--默認(rèn)使用id="mysql1"的environment-->
    <environments default="mysql">
        <!--環(huán)境配置一-->
        <environment id="mysql">
            <!--事務(wù)管理配置-->
            <transactionManager type="JDBC"/>
            <!--數(shù)據(jù)源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
        
        <!--環(huán)境配置二-->
        <environment id="oracle">
            <!--事務(wù)管理配置-->
            <transactionManager type="JDBC"/>
            <!--數(shù)據(jù)源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="${oracle.driver}"/>
                <property name="url" value="${oracle.url}"/>
                <property name="username" value="${oracle.username}"/>
                <property name="password" value="${oracle.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--不同廠商數(shù)據(jù)庫(kù)配置-->
    <databaseIdProvider type="DB_VENDOR">
        <!--name代表數(shù)據(jù)庫(kù)的產(chǎn)品名稱,區(qū)分大小寫,不能隨便填寫-->
        <!--value代表這個(gè)數(shù)據(jù)庫(kù)的產(chǎn)品名稱的別名,可以隨便起名,但盡量命名的有意義-->
        <property name="MySQL" value="yyyMySQL"/>
        <property name="Oracle" value="xxxOracle"/>
    </databaseIdProvider>
    
    <mappers>
        <!--這里的resource對(duì)應(yīng)上一步自動(dòng)生成的mapping/UserinfoMapper.xml文件-->
        <mapper resource="mapping/UserinfoMapper.xml"/>
    </mappers>
</configuration>

不同廠商數(shù)據(jù)庫(kù)的SQL語(yǔ)句也不盡然相同,xxxMapper.xml映射文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapping.UserinfoMapper">
    <!--以下兩個(gè)select的id相同,databaseId的值為上一步databaseIdProvider中配置的數(shù)據(jù)庫(kù)別名-->
    <select id="getAllUserinfo" resultType="userinfo" databaseId="xxxOracle">
    Oracle SQL語(yǔ)句
    </select>
    <select id="getAllUserinfo" resultType="userinfo" databaseId="yyyMySQL">
    MySQL SQL語(yǔ)句
    </select>
</mapper>

這樣,在不同的SQL映射上引用不同的數(shù)據(jù)庫(kù)別名xxxOracle和yyyMySQL,就可以達(dá)到SQL映射的id值一樣,但在不同的數(shù)據(jù)庫(kù)中可以執(zhí)行不同的SQL語(yǔ)句的目的了。
如何在java代碼中獲取不同廠商數(shù)據(jù)庫(kù)產(chǎn)品的名稱呢?代碼如下:

factory.getConfiguration().getEnvironment().getDataSource()
.getConnection().getMetaData().getDatabaseProductName();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容