多重資料來源支援


ActiveRecordPlugin 可同時支援多重資料來源、多方言、多重快取、多重交易等級等特性,對每個 ActiveRecordPlugin 可進行彼此獨立的配置。簡言之 JFinal 可以同時使用多重資料來源,並且可 以針對這多個資料來源配置獨立的方言、快取、交易等級等。


當使用多重資料來源時,只需對每個ActiveRecordPlugin 指定一個configName 即可,如下是程式碼範例:


public void configPlugin(Plugins me) {
// mysql 資料來源
C3p0Plugin dsMysql = new C3p0Plugin(…); me.add(dsMysql);
 
// mysql ActiveRecrodPlugin 實例,並指定configName為mysql ActiveRecordPlugin arpMysql = new ActiveRecordPlugin("mysql", dsMysql); me .add(arpMysql);
arpMysql.setCache(new EhCache()); arpMysql.addMapping("user", User.class);
 
// oracle 資料來源
C3p0Plugin dsOracle = new C3p0Plugin(…); me.add(dsOracle);
 
// oracle ActiveRecrodPlugin 實例,並指定configName為oracle ActiveRecordPlugin new ActiveRecordPlugin("oracle", dsOracle); me.add(arpOracle);
arpOracle.setDialect(new OracleDialect()); arpOracle.setTransaction .addMapping("blog", Blog.class);
}

以上程式碼創建了創建了兩個 ActiveRecordPlugin 實例 arpMysql 與 arpOrace,特別注意創建實例的同時指定其 configName 分別為 mysql 與 oracle。 arpMysql 與 arpOracle 分別映射了不同的Model,配置了不同的方言。


#


對於 Model 的使用,不同的 Model 會自動找到其所屬的 ActiveRecrodPlugin 實例以及相關 配置進行資料庫操作。假如希望同一個 Model 能夠切換到不同的資料來源上使用,也極度方便, 這種用法非常適合不同資料來源中的table 擁有相同表結構的情況,開發者希望用同一個Model 來操作這些相同表結構的 table,以下是範例程式碼:

public void multiDsModel() {
// 預設使用arp.addMapping(...)時關聯起來的資料來源
Blog blog = Blog.me.findById(123);
 
#//只要呼叫一次use方法即可切換到另一個資料來源上去
blog.use("backupDatabase").save();
}

上例中的程式碼,blog.use(“backupDatabase”)方法切換資料來源到 backupDatabase 並直接將資料儲存起來。


特別注意:只有在同一個 Model 希望對應到多個資料來源的 table 時才需要使用 use 方法,如果同一個Model 唯一對應一個資料來源的一個table,那麼資料來源的切換是自動的,不需要使用use 方法。


對於Db + Record 的使用,資料來源的切換需要使用 Db.use(cnfigName)方法得到資料庫操作對象,然後就可以進行資料庫操作了,以下是程式碼範例:

// 查詢dsMysql資料來源中的user
List<Record> users = Db.use("mysql").find( "select * from user");
// 查詢dsOracle資料來源中的blog
List<Record> blogs = Db.use("oracle"). find("select * from blog");

以上兩行程式碼,分別透過 configName 為 mysql、oracle 得到各自的資料庫操作對象,然後就可以如同單一數據完全一樣的方式來使用資料庫操作API 了。簡言之,對於 Db + Record 來 說,多資料來源相比單一資料來源僅需多呼叫一下 Db.use(configName),隨後的 API 使用方式完全一 樣。


注意最早建立的 ActiveRecrodPlugin 實例將會成為主資料來源,可以省略 configName。最早建立的 ActiveRecrodPlugin 實例中的配置將預設為主配置,此外還可以透過設定 configName為 DbKit.MAIN_CONFIG_NAME 常數來設定主配置。