JFinal

登录 注册

jfinal先创建表再关联mapping

需求:

    1.项目启动的时候,通过SQL模板文件先创建表

    2.创建表之后,通过_MappingKit映射到实体,通过实体来操作。比如 User.save();

实现

    1.在JFinalConfig的configPlugin 先调用初始化类去创建表。比如

public void configPlugin(Plugins me) {
        // 项目初始化,创建表,配置常量类
        new StartInitService().init();
        // 下面采用你之前的代码,比如初始化DruidPlugin/ActiveRecordPlugin等
}

    2.StartInitService类中,两个方法

public void init() {
    // 初始化数据库连接
    ActiveRecordPlugin arp = initDbConnection();
    // 创建表
    Kv kv = Kv.by("table", "User");
    SqlPara sql = Db.getSqlPara("create_table", kv);
    Db.update(sql);
    // 关闭这个插件
    arp.stop();
}

    /**
     * 初始化数据库连接
     * 
     * @return
     */
    private ActiveRecordPlugin initDbConnection() {
        Prop p = PropKit.use("config.properties");
        DruidPlugin druid = new DruidPlugin(p.get("jdbcUrl"), p.get("username"), p.get("password"));
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druid);
        // sql模板
        arp.addSqlTemplate("create.sql");
        arp.getEngine().setSourceFactory(new ClassPathSourceFactory());

        druid.start();
        arp.start();

        return arp;
    }


评论

  • 08-10 15:53
    init 方法中好像少了一个 arp.start(),所以你的 Db.update(sql) 这行代码执行应该有异常。 感谢分享
  • 08-10 19:42
    druid.stop() 也需要关闭下
    我一般这样用:

    public class DbPlugin implements IPlugin {
    DruidPlugin druidPlugin;
    ActiveRecordPlugin activeRecordPlugin;

    public DbPlugin(DruidPlugin druidPlugin, ActiveRecordPlugin activeRecordPlugin) {
    this.druidPlugin = druidPlugin;
    this.activeRecordPlugin = activeRecordPlugin;
    }

    @Override
    public boolean start() {
    druidPlugin.start();
    activeRecordPlugin.start();
    return true;
    }

    @Override
    public boolean stop() {
    activeRecordPlugin.stop();
    druidPlugin.stop();
    return true;
    }
    }
    使用: DbPlugin dbPlugin = new DbPlugin(dp, arp);
  • 发送