关于一个Model适应多个数据库的问题

callmeHEN 发布于 2014/09/26 02:35
阅读 217
收藏 2

@JFinal 你好,想跟你请教个问题

我使用的是jfinal1.8,现在我的项目有这样一个特殊的需求:

项目有很多个工程,每个工程都会被创建为一个数据库,数据库里的表都一样的。

因为数据库是动态的,所以无法在config里进行配置,只能动态创建。

现在我是每选择一个工程,就动态创建一个新的数据源和执行ActiveRecordPlugin。

我原本想的是切换工程的时候,通过configName去判断连接是否存在,存在则使用,不存在则创建新数据源。

但是现在一旦执行ActiveRecordPlugin后,model都映射为当前的这个数据源了,无法做到model的共用。

------------------------------------------------------------------------------------

问题:1.是否可以做到model的共用,在数据库都完全相同的情况。或是有什么办法?

        2.这样大量的数据库同时使用和切换,是否会影响性能或者其他?

谢谢!

加载中
0
JFinal
JFinal

    JFinal 的设计可以轻松实现你的特殊需求,切换数据库不影响性能。要想实现你的需求先预备点jfinal active record 设计层面的知识。

    ActiveRecord 模式的使用中有三个类起主要作用 Model、Config、DbKit 三个类。Model 与ActiveRecordPlugin 是多对一关系,ActiveRecordPlugin 与Config 是一对一关系,所以依靠ActiveRecordPlugin 这个中介 Model 与Config 也是多对一关系。

     DbKit 中有三个属性:config、modelToConfig、configNameToConfig,config 属性持有主配置用于Db.xxx(...),modelToConfig 持对 model到 config的关系,configNameToConfig持有配置名到config的关系。

     DataSource 是 Config 的属性之一,两者是一一对应的关系,所以解决方案非常简单,通过DbKit得到 config 对象,然后改变 config 对象的 dataSource 属性值使其指向另外的数据源即可,由于没有开放相关方法,可以采用反射方式或者改源码的方式。

    对性能的影响可以忽略不计,仅仅是只是改变了一个dataSource属性值而已。需要注意的问题是:你是否需要多线程并发地访问不同的数据源,若如此则需要多写点代码解决多线程同步的问题。

返回顶部
顶部