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

}





评论区

zzjxfj

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


}

JFinal

2018-11-04 15:13

@zzjxfj 可以进入这里进行编辑:
http://www.jfinal.com/my/share

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

此外,为啥不使用模板引擎做生成,这样会更加简单方便,看一下 jfinal 的 BaseModelGenerator 这类生成器全走的模板引擎,不仅生成方便,扩展的话更方便,只要改改模板文件就可以扩展了

zzjxfj

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

}

zzjxfj

2018-11-04 15:31

@JFinal 没BaseModelGenerator这个,jfinal我看的只看一些框架代码,辅助代码还没仔细看,说起模版引擎做生成,真真是个好注意,目前我这边项目上这个已经够需求用了,以后闲下来再改进,把这个功能引进来

JFinal

2018-11-04 16:05

@zzjxfj 模板引擎干生成的活是最简单方便的

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

fmpoffice

2021-08-30 16:14

@zzjxfj 大佬不更新了吗?