5.12 多數(shù)據(jù)源支持

2022-07-11 10:21 更新

ActiveRecordPlugin 可同時支持多數(shù)據(jù)源、多方言、多緩存、多事務級別等特性,對每個 ActiveRecordPlugin 可進行彼此獨立的配置。簡言之 JFinal 可以同時使用多數(shù)據(jù)源,并且可 以針對這多個數(shù)據(jù)源配置獨立的方言、緩存、事務級別等。


當使用多數(shù)據(jù)源時,只需要對每個 ActiveRecordPlugin 指定一個 configName 即可,如下是代碼示例:

public void configPlugin(Plugins me) {
// mysql 數(shù)據(jù)源
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 數(shù)據(jù)源
C3p0Plugin dsOracle = new C3p0Plugin(…); me.add(dsOracle);
 
// oracle ActiveRecrodPlugin 實例,并指定configName為 oracle ActiveRecordPlugin arpOracle = new ActiveRecordPlugin("oracle", dsOracle); me.add(arpOracle);
arpOracle.setDialect(new OracleDialect()); arpOracle.setTransactionLevel(8); arpOracle.addMapping("blog", Blog.class);
}

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


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

public void multiDsModel() {
// 默認使用arp.addMapping(...)時關聯(lián)起來的數(shù)據(jù)源
Blog blog = Blog.me.findById(123);
 
// 只需調用一次use方法即可切換到另一數(shù)據(jù)源上去
blog.use("backupDatabase").save();
}

上例中的代碼,blog.use(“backupDatabase”)方法切換數(shù)據(jù)源到 backupDatabase 并直接將數(shù) 據(jù)保存起來。


特別注意:只有在同一個 Model 希望對應到多個數(shù)據(jù)源的 table 時才需要使用 use 方法,如果 同一個 Model 唯一對應一個數(shù)據(jù)源的一個 table,那么數(shù)據(jù)源的切換是自動的,無需使用 use 方法。


對于 Db + Record 的使用,數(shù)據(jù)源的切換需要使用 Db.use(cnfigName)方法得到數(shù)據(jù)庫操作 對象,然后就可以進行數(shù)據(jù)庫操作了,以下是代碼示例:

// 查詢 dsMysql數(shù)據(jù)源中的 user
List<Record> users = Db.use("mysql").find("select * from user");
// 查詢 dsOracle數(shù)據(jù)源中的 blog
List<Record> blogs = Db.use("oracle").find("select * from blog");

以上兩行代碼,分別通過 configName 為 mysql、oracle 得到各自的數(shù)據(jù)庫操作對象,然后 就可以如同單數(shù)據(jù)完全一樣的方式來使用數(shù)據(jù)庫操作 API 了。簡言之,對于 Db + Record 來 說,多數(shù)據(jù)源相比單數(shù)據(jù)源僅需多調用一下 Db.use(configName),隨后的 API 使用方式完全一 樣。


注意最先創(chuàng)建的 ActiveRecrodPlugin 實例將會成為主數(shù)據(jù)源,可以省略 configName。最先創(chuàng)建的 ActiveRecrodPlugin 實例中的配置將默認成為主配置,此外還可以通過設置 configName為 DbKit.MAIN_CONFIG_NAME 常量來設置主配置。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號