- JFinal 为了省代码达到极速开发,所以只支持一个主数据源,同时支持多个辅数据源。所谓主数据源是指当你在使用JFinal对数据库操作时,如果没有明确指定数据源,那么默认为使用了主数据源。
- 主数据源可以在两个地方设置,其一是在 new ActiveRecordPlugin 时指定,其二是使用DbKit.setDataSource(DataSource ds)来指定。ActiverecordPlugin 中所依赖的主数据源,以及数据库配置都是共享的,所以 new 出多个 ActiveRecordPlugin来是没有意义的。主数据源可以通过DbKit.setDataSource(...)在程序中动态指定。
- C3P0Plugin 可以创建多个对象,这是有意义的,所以楼主上面给的代码是有意义的。
- Oracle 在保存数据时 primaryKey 是指主键名称,例如可以是"ID",而Record这个参数中,要给定相应的主键值,如new Record().set("ID", 123);
以下给出多数据源的使用例子代码,首先是初始化代码:
01 | public void configPlugin(Plugins me) { |
02 | // C3p0Plugin可以有多个对象存在 |
03 | C3p0Plugin c3p0Plugin = new C3p0Plugin(...); |
04 | C3p0Plugin c3p0Plugin2 = new C3p0Plugin(...); |
05 | me.add(c3p0Plugin); |
06 | me.add(c3p0Plugin2); |
07 |
08 | // ActiveRecordPlugin 只能有一个对象存在 |
09 | ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin); |
10 | me.add(arp); |
11 | arp.addMapping( "vote" , Vote. class ); |
12 | } |
以下是多数据源使用代码:
1 | // 没有指定数据源的时候,默认使用是的主数据源 |
2 | Vote vote = Vote.dao.findById( 123 ); |
3 |
4 | // 指定了数据源,默认使用的是辅数据源,注意下面方法的第一个参数都指定了数据源 |
5 | List<Record> votes = Db.find(c3p0Plugin2.getDataSource(), "select * from vote" ); |
6 | Db.save(C3p0Plugin2.getDataSource(), "vote" , "ID" , new Record().set( "ID" , 888 ).set(...).set(...)); |