Prise en charge de plusieurs sources de données


ActiveRecordPlugin peut prendre en charge plusieurs sources de données, plusieurs dialectes, plusieurs caches, plusieurs niveaux de transaction et d'autres fonctionnalités en même temps. Chaque ActiveRecordPlugin peut être configuré indépendamment les uns des autres. En bref, JFinal peut utiliser plusieurs sources de données en même temps et configurer des dialectes, des caches, des niveaux de transaction indépendants, etc. pour ces multiples sources de données.


Lorsque vous utilisez plusieurs sources de données, il vous suffit de spécifier un configName pour chaque ActiveRecordPlugin. Voici un exemple de code :


public void configPlugin(Plugins me) {
// mysql . Source de données
C3p0Plugin dsMysql = new C3p0Plugin(…); me.add(dsMysql);

// mysql ActiveRecrodPlugin, et spécifiez configName comme mysql ActiveRecordPlugin arpMysql = new ActiveRecordPlugin(" mysql", dsMysql) ; me.add(arpMysql);
arpMysql.setCache(new EhCache()); arpMysql.addMapping("user", User.class);

// source de données oracle
C3p0Plugin dsOracle = new C3p0Plugin(…); me.add(dsOracle);

// instance oracle ActiveRecrodPlugin, et spécifiez configName comme oracle ActiveRecordPlugin arpOracle = new ActiveRecordPlugin("oracle", dsOracle); setDialect(
new OracleDialect()); arpOracle.setTransactionLevel(8); arpOracle.addMapping("blog", Blog.class);}
Le code ci-dessus crée deux instances d'ActiveRecordPlugin arpMysql et arpOrace, payez spécial attention à spécifier son configName comme mysql et oracle respectivement lors de la création de l'instance. arpMysql et arpOracle mappent respectivement différents

Modèles et configurent différents dialectes.



Pour l'utilisation de Model, différents modèles trouveront automatiquement leur instance ActiveRecrodPlugin et la configuration associée pour les opérations de base de données. Si vous souhaitez que le même modèle soit basculé vers différentes sources de données, cette utilisation est très adaptée aux tables de différentes sources de données qui ont la même structure de table. Les développeurs souhaitent utiliser le même modèle pour exploiter ces mêmes structures de table. . table, voici l'exemple de code :

public void multiDsModel() {
// La source de données associée lorsque arp.addMapping(...) est utilisée par défaut
Blog blog = Blog. me .findById(123);

// Appelez simplement la méthode use une fois pour passer à une autre source de données
blog.use("backupDatabase").save();
}

In le code dans l'exemple, la méthode blog.use("backupDatabase") fait basculer la source de données vers backupDatabase et enregistre les données directement.


Remarque spéciale : Vous ne devez utiliser la méthode use que lorsque le même modèle souhaite correspondre à des tables de plusieurs sources de données. Si le même modèle ne correspond qu'à une seule table d'une source de données, alors la source de données. la commutation est automatique, pas besoin d'utiliser la méthode d'utilisation.


Pour l'utilisation de Db + Record, le changement de source de données nécessite l'utilisation de la méthode Db.use(cnfigName) pour obtenir l'objet d'opération de base de données, puis vous pouvez effectuer des opérations de base de données :

. // Interroger l'utilisateur de données dsMysql dans la source
List<Record> dans la source de données dsOracle ; blogs = Db.use("oracle").find("select * from blog");

Les deux lignes de code ci-dessus obtiennent les objets d'opération de base de données respectifs pour MySQL et Oracle. via configName, puis vous pouvez utiliser l'API d'opération de base de données exactement de la même manière que les données uniques. En bref, pour Db + Record, plusieurs sources de données ne nécessitent qu'un seul appel de plus à Db.use(configName) qu'une seule source de données, et l'utilisation ultérieure de l'API est exactement la même.
Notez que la première instance ActiveRecrodPlugin créée deviendra la source de données principale et que configName peut être omis. La configuration dans la première instance ActiveRecrodPlugin créée deviendra la configuration principale par défaut. De plus, la configuration principale peut également être définie en définissant configName
sur la constante DbKit.MAIN_CONFIG_NAME.