複数のデータソースのサポート


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()); // Oracle データソース
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);}
上記のコードは、2 つの ActiveRecordPlugin インスタンス arpMysql と arpOrace を作成します。インスタンスを作成するときは、configName をそれぞれ mysql と oracle として指定することに注意してください。 arpMysql と arpOracle はそれぞれ、異なる
Model をマップし、異なる方言を設定します。



モデルを使用する場合、さまざまなモデルが ActiveRecrodPlugin インスタンスとデータベース操作に関連する設定を自動的に見つけます。同じモデルを異なるデータ ソースに切り替える場合、この使用法は、開発者が同じテーブル構造を持つ異なるデータ ソースのテーブルを同じモデルを使用して操作する場合に非常に便利です。 . table、以下はサンプルコードです:

public void multiDsModel() {
// arp.addMapping(...) がデフォルトで使用されるときに関連付けられるデータソース
Blog blog = Blog. me .findById(123);

// use メソッドを 1 回呼び出すだけで、別のデータ ソースに切り替えることができます
blog.use("backupDatabase").save();
}

この例のコード blog.use("backupDatabase") メソッドは、データ ソースを backupDatabase に切り替え、データを直接保存します。


特記事項: use メソッドを使用する必要があるのは、同じモデルが複数のデータ ソースのテーブルに対応する場合のみです。同じモデルが 1 つのデータ ソースの 1 つのテーブルにのみ対応する場合、そのデータ ソースは切り替えは自動なので、使用方法を使用する必要はありません。


Db + Record を使用する場合、データ ソースを切り替えるには、Db.use(cnfigName) メソッドを使用してデータベース操作オブジェクトを取得する必要があり、その後、データベース操作を実行できます。 以下はコード例です。 // ソース内の dsMysql データ ユーザーをクエリします

List<Record>
users
= Db.use("mysql").find("select * from user");// クエリ blog
List<Record> dsOracle データ ソース内 ;
blogs
= Db.use("oracle").find("select * from blog");
上記の 2 行のコードは、mysql と oracle のそれぞれのデータベース操作オブジェクトを取得します。 configName を介して、単一データとまったく同じようにデータベース操作 API を使用できます。つまり、Db + Record の場合、複数のデータ ソースでは、単一のデータ ソースよりも Db.use(configName) の呼び出しが 1 回多く必要になるだけで、その後の API の使用法はまったく同じになります。


最初に作成された ActiveRecrodPlugin インスタンスがメイン データ ソースになり、configName は省略できることに注意してください。最初に

作成された ActiveRecrodPlugin インスタンスの構成がデフォルトでメイン構成になります。また、configName

を DbKit.MAIN_CONFIG_NAME 定数に設定することによって、メイン構成を設定することもできます。