在JfinalConfig里定义了两套数据源(分别定义的druidPlugin1,arp1 ;druidPlugin2,arp2 ;
两套数据源有一张结构相同的表,但是表名不一样。
arp1.addMapping("config", "id", Config.class);
arp2.addMapping("sys_config", "id", Config.class);
我通过更改Config的_getConfig()返回值切换的数据源,但是访问的表并没有切换,一直为我最后配置的arp2配置的表名sys_config,请问是同一个model不能配置不同的表名吗?
后期发现Model的save方法,取表明这里并没有根据数据源而切换
Config config = _getConfig();
Table table = getTable();
后期getTable()方法能否设计成跟_getConfig()一样吗?
因为 Model 中所有 api 去找数据源的时候,都是通过 getClass() 拿到自己是什么 class,然后将这个 class 当成 key 去 Map 中找数据源,而 Model.class 是全局唯一的,必然也只能对应一个数据源
如果希望 model 切换数据源,只能是临时来切换,像这样:
model.use(config).find(...);
上面说了这么多,其实你只要问你自己下面一个问题就可以了:
假定有下面的配置:
arp1.addMapping("config", "id", Config.class);
arp2.addMapping("sys_config", "id", Config.class);
那么 new Config().findById(123); 这行代码到底是去 "config" 还是去 "sys_config" 数据源去查询? 所以我前面说的同一个 Model 映射到多个数据源没有意义