jfinal先创建表再关联mapping

需求:

    1.项目启动的时候,通过SQL模板文件先创建表(省的每次部署项目都要手动创建数据库,还是手动导入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();
    druid.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;
    }


评论区

JFinal

2018-08-10 15:53

init 方法中好像少了一个 arp.start(),所以你的 Db.update(sql) 这行代码执行应该有异常。 感谢分享

杜福忠

2018-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);

tosur

2018-08-24 11:46

@JFinal arp.start(); 在最下面那个方法 initDbConnection()

tosur

2018-08-24 11:47

@杜福忠 谢谢,我说怎么定义的连接池是5个,怎么一直有10个。 关闭有先后顺序吗?

tosur

2018-08-24 11:56

@杜福忠 你使用插件的方式,相当于和Jfinal config 中的configPlugin 使用同一个连接池。没办法实现我的需求。会造成无法关联mapping。因为表要先创建,然后才能关联mapping。 configPlugin 的连接池/ActiveRecordPlugin配置,会跑在创建表之前

杜福忠

2018-08-24 15:01

@tosur 关闭有先后顺序的, 后进的先关闭.

杜福忠

2018-08-24 15:09

@tosur 说的第二个问题, 可以在 ActiveRecordPlugin , 启动后, 1建表, 2关闭它, 3关联mapping, 4启动它, 就相当于刷新了一下 ActiveRecordPlugin . 不过这些Plugin都非常灵活, 怎么用都可以

一只敲代码的猫

2021-01-26 16:04

能不能再controller的一个接口(方法)中创建一张表?

热门分享

扫码入社