JFinal

登录 注册

jfianl model 生成工具

特色:多线程,Base层,映射层,集中映射类

项目地址:

https://github.com/zzjxfj/jfinal_model_generating/tree/master


由于使用了多线程,本工具生成效率很高,上千张表除去建立连接的时候,不超过5秒,当然也因你的数据库性能有所变化!可以设定线程数量(默认10);生成完成后会关闭数据库连接,避免了数据库服务连接使用完却未释放问题!

本工具的特色是 生成的Model 分两层:

    1) Base层会对应表字段生成相应的 get set 方法,常量表名 _TABLENAME和常量列表及数据库对列的注释;对应包名在设定的包名后面加".base"内;(注:本包内文件每次生成会覆盖,不要把自定义方法写在这里面!),本包内类名字为"表名首字母大写"+"_Base.java",默义继承自"com.jfinal.plugin.activerecord.Model",如果想加入一个所有表都能用的方法,可以自己写一个继承自"com.jfinal.plugin.activerecord.Model"的类,把方法写里面,然后重新生成,把基础继承类继承自你写的这个类,这样,每个model里面都可以执行你写的这些方法了,例如:countAll()//查询表里所有条目的总数!

    2)    model映射业务层:对应包名可以设定,默认为"com.jfinal.core.entitys"(Base层是com.jfinal.core.entitys.base),文件名是"表名首字母大写.java";本包内类文件做为映射表的类,继承自base层对应的类,这里面可以写一些业务方法(不是很建议,但是很效率),重新生成不会被覆盖!另外,这个包里还有一个类文件_TablePlugins.java,它的做用是简化你在Jfinal配置类里配置表映射,你本需要在JfinalConfig.configPlugin(Plugins me)里面,配置ActiveRecordPlugin.addMapping("表名",表MODEL.class),有多少个就要配多少个,现在,这些代码都给你生成了,你可以直接 new _TablePlugins().addMapping(me)就OK了;




如何使用:

/**

* 该工具需要javaSE-1.7以上版本支持

* 该工具需要外部jar包支持

* 开发时引入的jar包有:

* 1.jfinal-3.3

* 2.druid-1.1.10

* 3.mysql-connector-java-8.0.11

*/

public static void main(String[] args) throws Exception{

//数据库连接地址

String jdbcURL="jdbc:mysql://127.0.0.1/test";

//数据库用户名

String username="root";

//数据库密码

String password="root";

TableToModel start=new TableToModel(jdbcURL, username, password);

/**

设定生成的包名 默认为:"com.jfinal.core.entitys"

start.setPackageName("cn.reaee.core.entitys");

只生成表名包含shop的表  默认不过滤

start.setOnlyCreateStatus(true);//打开过滤

start.setOnlyCreateRegex(".*shop.*");//设定规则(正则表达式)

不生成表名中有member的表  默认不过滤

start.setNotCreateStatus(true);//打开过滤

start.setNotCreateRegex(".*member.*");//设定规则(正则表达式)

设定基础类的继承 ,默认继承自:com.jfinal.plugin.activerecord.Model

start.setBaseExtends("aa.bb.cc.Aaa");

这里不一一演示,里有有详细的备注,stat.set就会自动提示出设定的做用了!

*/

start.start();

}





评论

  • 11-04 15:03
    分享后怎么没法编辑了;下面分享两个生成的类:

    Base层类

    package com.wcsmia.core.entitys.base;

    /**
    * shop_adv 实体类
    */

    public class Shop_adv_Base extends com.wcsmia.core.defined.MyModel{

    /**
    * 表名称 shop_adv
    */
    public static final String _TABLENAME="shop_adv";

    /**
    * 主键 id,uniacid,displayorder,enabled
    */
    public static final String _PRIMARY_KEYS="id,uniacid,displayorder,enabled";

    /**
    * 类型: int(11) unsigned
    * 为空: NO
    * 自增: auto_increment
    * 主键: PRI
    */
    public static final String ID = "id" ;

    /**
    * 类型: int(11)
    * 默认: 0
    * 为空: YES
    * 主键: MUL
    */
    public static final String UNIACID = "uniacid" ;

    /**
    * 备注: 轮播图名称
    * 类型: varchar(50)
    * 为空: YES
    */
    public static final String ADVNAME = "advname" ;

    /**
    * 备注: 轮播图链接
    * 类型: varchar(255)
    * 默认: #
    * 为空: NO
    */
    public static final String LINK = "link" ;

    /**
    * 备注: 轮播图图片链接
    * 类型: varchar(255)
    * 为空: NO
    */
    public static final String THUMB = "thumb" ;

    /**
    * 备注: 排序
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public static final String DISPLAYORDER = "displayorder" ;

    /**
    * 备注: 是否显示
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public static final String ENABLED = "enabled" ;

    /**
    * 类型: int(11) unsigned
    * 为空: NO
    * 自增: auto_increment
    * 主键: PRI
    */
    public java.lang.Long getId(){
    return getLong("id");
    }

    /**
    * 类型: int(11) unsigned
    * 为空: NO
    * 自增: auto_increment
    * 主键: PRI
    */
    public java.lang.Long getId(java.lang.Long defaultVal){
    java.lang.Long _v=getLong("id");
    return _v==null? defaultVal:_v;
    }

    /**
    * 类型: int(11) unsigned
    * 为空: NO
    * 自增: auto_increment
    * 主键: PRI
    */
    public M setId(java.lang.Long val){
    set("id", val);
    return (M)this;
    }

    /**
    * 类型: int(11)
    * 默认: 0
    * 为空: YES
    * 主键: MUL
    */
    public java.lang.Integer getUniacid(){
    return getInt("uniacid");
    }

    /**
    * 类型: int(11)
    * 默认: 0
    * 为空: YES
    * 主键: MUL
    */
    public java.lang.Integer getUniacid(java.lang.Integer defaultVal){
    java.lang.Integer _v=getInt("uniacid");
    return _v==null? defaultVal:_v;
    }

    /**
    * 类型: int(11)
    * 默认: 0
    * 为空: YES
    * 主键: MUL
    */
    public M setUniacid(java.lang.Integer val){
    set("uniacid", val);
    return (M)this;
    }

    /**
    * 备注: 轮播图名称
    * 类型: varchar(50)
    * 为空: YES
    */
    public java.lang.String getAdvname(){
    return getStr("advname");
    }

    /**
    * 备注: 轮播图名称
    * 类型: varchar(50)
    * 为空: YES
    */
    public java.lang.String getAdvname(java.lang.String defaultVal){
    java.lang.String _v=getStr("advname");
    return _v==null? defaultVal:_v;
    }

    /**
    * 备注: 轮播图名称
    * 类型: varchar(50)
    * 为空: YES
    */
    public M setAdvname(java.lang.String val){
    set("advname", val);
    return (M)this;
    }

    /**
    * 备注: 轮播图链接
    * 类型: varchar(255)
    * 默认: #
    * 为空: NO
    */
    public java.lang.String getLink(){
    return getStr("link");
    }

    /**
    * 备注: 轮播图链接
    * 类型: varchar(255)
    * 默认: #
    * 为空: NO
    */
    public java.lang.String getLink(java.lang.String defaultVal){
    java.lang.String _v=getStr("link");
    return _v==null? defaultVal:_v;
    }

    /**
    * 备注: 轮播图链接
    * 类型: varchar(255)
    * 默认: #
    * 为空: NO
    */
    public M setLink(java.lang.String val){
    set("link", val);
    return (M)this;
    }

    /**
    * 备注: 轮播图图片链接
    * 类型: varchar(255)
    * 为空: NO
    */
    public java.lang.String getThumb(){
    return getStr("thumb");
    }

    /**
    * 备注: 轮播图图片链接
    * 类型: varchar(255)
    * 为空: NO
    */
    public java.lang.String getThumb(java.lang.String defaultVal){
    java.lang.String _v=getStr("thumb");
    return _v==null? defaultVal:_v;
    }

    /**
    * 备注: 轮播图图片链接
    * 类型: varchar(255)
    * 为空: NO
    */
    public M setThumb(java.lang.String val){
    set("thumb", val);
    return (M)this;
    }

    /**
    * 备注: 排序
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public java.lang.Integer getDisplayorder(){
    return getInt("displayorder");
    }

    /**
    * 备注: 排序
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public java.lang.Integer getDisplayorder(java.lang.Integer defaultVal){
    java.lang.Integer _v=getInt("displayorder");
    return _v==null? defaultVal:_v;
    }

    /**
    * 备注: 排序
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public M setDisplayorder(java.lang.Integer val){
    set("displayorder", val);
    return (M)this;
    }

    /**
    * 备注: 是否显示
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public java.lang.Integer getEnabled(){
    return getInt("enabled");
    }

    /**
    * 备注: 是否显示
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public java.lang.Integer getEnabled(java.lang.Integer defaultVal){
    java.lang.Integer _v=getInt("enabled");
    return _v==null? defaultVal:_v;
    }

    /**
    * 备注: 是否显示
    * 类型: int(11)
    * 默认: 0
    * 为空: NO
    * 主键: MUL
    */
    public M setEnabled(java.lang.Integer val){
    set("enabled", val);
    return (M)this;
    }

    }


    映射层类:
    package com.wcsmia.core.entitys;

    import com.wcsmia.core.entitys.base.Shop_adv_Base;
    /**
    * shop_adv 实体类
    */

    public class Shop_adv extends Shop_adv_Base{

    /**
    * 获取操作表的dao
    */
    public static final Shop_adv dao = new Shop_adv();


    }
  • 11-04 15:13
    @zzjxfj 可以进入这里进行编辑:
    http://www.jfinal.com/my/share

    注意点击右侧的“编辑”按钮进行编辑

    此外,为啥不使用模板引擎做生成,这样会更加简单方便,看一下 jfinal 的 BaseModelGenerator 这类生成器全走的模板引擎,不仅生成方便,扩展的话更方便,只要改改模板文件就可以扩展了
  • 11-04 15:26
    package com.wcsmia.core.defined;

    import com.jfinal.plugin.activerecord.Model;
    import com.jfinal.plugin.activerecord.Table;
    import com.jfinal.plugin.activerecord.TableMapping;

    public class MyModel extends Model{
    public Table table=TableMapping.me().getTable(getUsefulClass());

    public M findFirstByCache(Object key, String sql) {
    return super.findFirstByCache(table.getName(), key, sql);
    }

    }
  • 11-04 15:31
    @JFinal 没BaseModelGenerator这个,jfinal我看的只看一些框架代码,辅助代码还没仔细看,说起模版引擎做生成,真真是个好注意,目前我这边项目上这个已经够需求用了,以后闲下来再改进,把这个功能引进来
  • 11-04 16:05
    @zzjxfj 模板引擎干生成的活是最简单方便的

    jfinal 老版本生成 Model、BaseModel 也是用的 java 代码,不仅代码量超大,而且代码很不好维护,也不好阅读,换成模板实现以后,事情变得极为简单
  • 发送