Jfinal数据库操作在WebService或非web项目中的使用

时间:2022-01-22 18:23:16

接触上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的使用就不用考虑注册的名字了。