接触上jfinal后就基本不使用其它框架了,一直在web开发中使用,最近做了个小的WebService应用,还是使用jfinal操作数据库,在这里分享下使用经验。
我的环境是三个oracle数据库,一个数据库接收数据,然后分发数据到另外两个数据库,使用jfinal的多数据源功能刚好满足要求。
编写数据库初始化类:
直接上代码
package ynitil.pekk.ws.common;
import java.util.List;
import ynitil.pekk.ws.model.Cltxb;
import ynitil.pekk.ws.model.CltxbArch;
import ynitil.pekk.ws.model.CltxbDh;
import ynitil.pekk.ws.model.IdCode;
import ynitil.pekk.ws.model.Kkcl;
import ynitil.pekk.ws.model.KkclArch;
import ynitil.pekk.ws.model.KkclPekk;
import ynitil.pekk.ws.model.TrfPic;
import ynitil.pekk.ws.model.UpInfo;
import ynitil.pekk.ws.model.UpInfoArch;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.DbKit;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.druid.DruidPlugin;
public class WsInit {
static DruidPlugin dpWs;
static ActiveRecordPlugin arpWs;
static DruidPlugin dpPekk;
static ActiveRecordPlugin arpPekk;
static DruidPlugin dpSyncProv;
static ActiveRecordPlugin arpSyncProv;
static{
init();
}
public static void init(){
initWsDb();//初始化本地库
initPekkDb();//初始化PEKK库
initSyncProvDb();//初始化上传XX库
// HandleData.start();//转存数据到服务器
}
//初始化本地数据库
public static void initWsDb(){
if(dpWs!=null){
return;
}
dpWs = new DruidPlugin(FileOp.readPropByKey("jdbcUrl"),
FileOp.readPropByKey("user"),
FileOp.readPropByKey("password"));
dpWs.setDriverClass(FileOp.readPropByKey("jdbcDrive"));
dpWs.start();
arpWs = new ActiveRecordPlugin(DbKit.MAIN_CONFIG_NAME,dpWs);
arpWs.setDialect(new OracleDialect());
// 设置大小写不敏感
arpWs.setContainerFactory(new CaseInsensitiveContainerFactory());
arpWs.addMapping("IdCode","idCode", IdCode.class);//
arpWs.addMapping("UpInfo","id", UpInfo.class);//
arpWs.addMapping("UPInfo_Arch","id", UpInfoArch.class);//
arpWs.addMapping("Kkcl","clbh", Kkcl.class);//
arpWs.addMapping("Kkcl_Arch","clbh", KkclArch.class);//
arpWs.addMapping("Cltxb","clbh", Cltxb.class);//
arpWs.addMapping("Cltxb_Arch","clbh", CltxbArch.class);//
arpWs.addMapping("Equipment","sbbh", Equipment.class);//
arpWs.addMapping("TrfPic","id", TrfPic.class);//
arpWs.start();
System.out.println("本地数据库初始化成功.............................");
}
//初始化PEKK数据库
public static void initPekkDb(){
if(dpPekk!=null){
return;
}
dpPekk = new DruidPlugin(FileOp.readPropByKey("jdbcUrl_pekk"),
FileOp.readPropByKey("user_pekk"),
FileOp.readPropByKey("password_pekk"));
dpPekk.setDriverClass(FileOp.readPropByKey("jdbcDrive"));
dpPekk.start();
arpPekk = new ActiveRecordPlugin("pekk",dpPekk);
arpPekk.setDialect(new OracleDialect());
// 设置大小写不敏感
arpPekk.setContainerFactory(new CaseInsensitiveContainerFactory());
String kkcl = FileOp.readPropByKey("pekkTable");
arpPekk.addMapping(kkcl,"CLBH", KkclPekk.class);//
arpPekk.start();
System.out.println("PEKK数据库初始化成功.............................");
}
//初始化同步XXX数据库
public static void initSyncProvDb(){
if(dpSyncProv!=null){
return;
}
dpSyncProv = new DruidPlugin(FileOp.readPropByKey("jdbcUrl_syncProv"),
FileOp.readPropByKey("user_syncProv"),
FileOp.readPropByKey("password_syncProv"));
dpSyncProv.setDriverClass(FileOp.readPropByKey("jdbcDrive"));
dpSyncProv.start();
arpSyncProv = new ActiveRecordPlugin("syncProv",dpSyncProv);
arpSyncProv.setDialect(new OracleDialect());
// 设置大小写不敏感
arpSyncProv.setContainerFactory(new CaseInsensitiveContainerFactory());
String cltxb = FileOp.readPropByKey("syncProvTable");//动态映射到配置的指定表
arpSyncProv.addMapping(cltxb,"jlbh", CltxbDh.class);//
arpSyncProv.start();
System.out.println("上传XX库初始化成功.............................");
}
}
}
说明一下,定义变量的时候我用的是static的,里面的FileOp是自己的一个工具类。
初始化我是在Delegate类里进行的:
public class UpInfoServerDelegate {
static{
WsInit.init();
}
..................
}
}
项目启动以后,所有的操作和WEB项目一样,该使用Model的地方还是使用Model,使用Db的地方还是使用Db,但是要注意使用注册的名字。
如:
Db.use("pekk").find("..............")//使用pekk库
model的使用就不用考虑注册的名字了。