关于 VertX-generator

简单来说VertX-generator是一款使用Javafx开发的代码生成工具,该工具支持Oracle,Mysql,SqlServer,PostgreSql等数据库的逆向生成, VertX-generator面向于vert.x这个tool-kit http://vertx.io 但VertX-generator并不仅仅可以生产vert.x所需代码 因为VertX-generator只依赖一样东西就是模板 , 因为他的使命就是将表中的数据读取出来后填充到模板中 关于VertX-generator运行要求,运行时文件存放路径不能存在中文;CMEU窗体基于javafx8,语法使用大部分java8特性,开发使用环境使用1.8.66,已知使用特性中最低要求为1.8.40,所以运行环境要求JDK1.8.66及以上
官方QQ交流群号: 99135252
  1. 生成实体类(可以自定义: get/set,有参无参构造方法,自定义类型与属性,序列化,json encode/decode等)[可选项]
  2. 生成数据库相关操作(支持异步直接获取结果不需要自己编写任何代码)DBVerticle(查询全部信息,通过ID查询信息,插入全部属性,插入不为空的属性,通过ID更新全部属性,通过ID更新不为空的属性,通过Assist更新全部属性,通过Assist更新不为空的属性,通过ID删除信息,通过Assist删除信息)[可选项]
  3. 生成业务逻辑相关操作 serviceVerticle [可选项]
  4. 生成web API相关接口 Router [可选项]
  5. 生成SQL类 继承自AbstractSQL 用于得到操作数据库的语句与参数
  6. 生成查询工具Assist(Assist为CMEU特别定制的查询工具,使用该工具一切操作都变得超简单,比如:分页通过Assist只需要设置2个参数就可以实现比如参数1=10,参数2=5,查询出来就是第10行到15行的数据,同时也可以防注入动态添加查询添加,去重,排序,自定义返回列等)可选项;
主界面
主界面

config:用于存放数据库,配置信息等,里面为sqlite数据库文件,当升级版本时可以将改文件代替新版本便可以保留原有的数据;

libs:用于存放VertX-generator所需jar包,以及数据库连接jar包(可自己更换);

logs:用于存放VertX-generator运行时的系统日志,其info文件夹为普通日志,error文件夹为异常日志;

template:用于存放生成模板,如果要恢复默认模板删除该文件夹便可以,系统默认模板以Temp-default开头,自定义模板建议以Temp-Custom开通,VertX-generator只之别带Temp/temp开头的模板;

运行环境要求:运行该工具需要JDK1.8.66及以上;因为本工具使用的信息提示为jdk1.8.40的特新,开发环境基于jdk1.8.66开发,当系统中存在JDK1.8.66以上(最少已知的特新中要求jdk版本号大于1.8.40),双击运行或者终端java -jar VertX-Generator.jar运行;

使用说明

VertX-generator生成后有两个核心类分别是 AbstractSQLSqlAssist
AbstractSQL是所有SQL类的父类,是一个抽象类,所有的操作SQL语句都由它生产,SqlAssist是一个帮助类,也就是条件类,可以用它来添加条件,排序,去重,分页等;
然后就是模板,VertX-generator的责任是将数据库取出来的东西填充到模板然后生成实际的代码,所以你需要根据你的实际情况参考默认的模板后编写自己的模板
打开VertX-generator第一步:数据库连接(既连接一个数据库),第二步:选择生成的模板,第三步:选择要生成的表(也可以全库),第四步:选择要生成的内容以及生成到那个目录下,第五步:执行生成

系统多大部分选择框相关的都有tooltip提示说明:将鼠标悬停在其上后便会做出相应的提示;

  • 1.数据库连接
    连接到现有的数据库,连接完成后闲置在⑸中, 数据库连接
  • 2.配置信息
    管理现有的配置信息,比如加载或者删除等, 配置信息
  • 3.模板设置
    用于配置生成时采用哪个模板, 模板设置
  • 4.使用说明
    使用说明包括软件当前版本号,文档地址,源码地址,以及模板仓库地址
  • 5.数据库列表
    当添加数据库连接后,可以双击显示数据库中所以的表,也可以用过右键,全库生成/打开/关闭/修改/删除现有的数据库连接;
    全库生成既将当前数据库中所有的表都生成
  • 6.项目所在目录
    输入或者通过按钮选择将文件生成到某个目录
  • 7.表的名字
    通过双击选择所要创建的表名将表的信息加载至右侧数据面板;
  • 8.实体类相关,9.DaoVerticle相关,10.BizVerticle相关,11.Router相关,12.SQL相关
    从左到右分别为是否创建
    类的包名比如com.entity,类名字,需要留一个{c}用于将表名帕斯卡后填充进去
    属性设置,做相关的设置
  • 13.SqlAssist相关
    SqlAssist为SQL的帮助类主要用于做条件查询相关,比如去重,排序,分页,指定返回列等 SqlAssist
  • 14.AbstractSQL相关
    AbstractSQL有四个抽象的方法需要实现,分别是表名,主键,列,属性,SQL类继承该类并实现它的方法,便可以进行数据库相关的操作 AbstractSQL
  • 15.SqlAndParams相关
    SqlAndParams实SQL相关的返回值,指定操作后SQL会返回执行的SQL语句与参数,用户就可以拿SQL语句与参数进行执行
  • 16.文件编码格式
    用于指定生成时采用什么编码格式生成
  • 17.JsonObject属性驼峰命名
    当不生成实体类时,系统就会采用json的格式进行操作,打扣时系统会将表中的列进行驼峰命名,如果不打勾则列名是什么就采用什么
  • 18.执行创建
    当所有地方设置选择完毕以后就可以点击执行创建
  • 19.保存配置
    保存配置的范围,包括模板,实体类,dao,biz,router,sql以及首页数据面板,系统默认识别default如果配置文件中存在default就会加载default
  • 连接名称
    连接名称用于保存当前连接,名字用户自定义,当保存后将会显示在首页左侧树形菜单
  • 主机名/Ip地址
    主机名/Ip地址指定数据库的地址,比如本机的localhost或者127.0.0.1
  • 端口号
    端口号为数据库的端口号比如oracle:1521
  • 数据库类型
    目前支持4种数据库,通过下拉框选择相应的数据库,比如:选择Oracle
  • 数据库
    数据库为你所要连接的数据库名称,比如:连接的数据库名叫orcl,那么则填写orcl便可
  • 用户
    数据库连接的用户名:比如:scott
  • 密码
    数据库连接的密码:比如:tiger
  • 编码格式
    编码格式:如果数据库有编码格式要求则下拉选择,如果数据库没有要求编码格式则不需要理会
  • 完成添加连接
    当所有选项填写完毕后,点击测试连接;如果连接成功便会提示连接成功,如果连接失败有可能是因为数据库架包不兼容, 或者是数据库服务没有打开,失败系统会给出相应的提示;如果是架包不兼容可以往下查看注意事项;
    如果连接成功,便可以选择保存连接完成数据库;

注意事项

关于数据库驱动架包

系统默认集成的版本分别是:
Oracle=Oracle6.jar
SqlServer=sqljdbc2008.jar
MySql=mysql-connector-java-5.1.40.jar
PostgreSql=postgresql-42.0.0.jar
  • 新增配置信息
    配置信息用于保存首页的相关配置,比如包名,文件资源路径等,通过首页的保存配置按钮新建配置信息;
    系统启动时如果配置信息中存在名为default的配置文件,系统将默认加载default配置信息,所以如果是常用的配置信息可以采用default命名
  • 加载配置信息
    可以通过配置信息->操作->加载配置;将已经保存的信息重新加载到首页;
  • 删除配置信息
    可以通过配置信息->操作->删除配置;确定便可;
  • 实体类创建时常用设置
    可以选择创建实体类的习惯并保存,后面生成实体类就会根据你的设置进行生成;
    如果保存报错可能是因为旧版本的config.db跟新版本的config.db不兼容,可以删除config文件夹中的config.db再执行
模板设置用于配置生成时采用哪些模板进行生成 {*DBType*}占位符用于生成时填充所选择的数据库
与首页一样大部分选择框鼠标悬浮在其上都会显示tooltip提示;
  • 属性表格说明
    属性表格中:你可以选择是否创建该行属性,创建打钩,不创建取消打钩; 表中的列名与jdbc数据类型无法修改,java数据类型以及属性名可以自己修改成自己想要的类型/名称, java数据类型可以自己输入或者下拉选择,属性名双击列便可以输入新的名称回车修改;
  • 选择框相关说明
    将鼠标悬浮到其选择框上面停留将会出现相应的提示!
  • 保存配置
    保存配置将属性设置为长期保存,如果你是通过别的方式加载进来的当你保存后你需要在首页再保存一次,首页保存的会覆盖当前保存页;
  • 表的别名
    表的别名用于结果就是 表名 as 设置了的表别名
  • 表主键名称
    系统会自动识别表中的主键,如果识别有误的话可以自己改正;
  • 自定义属性
    类型输入你要创建属性的类型;名称输入你要创建的属性名称;点击->添加 便会将属性添加到类中;
  • 确定与取消说明
    当点击确定的时候完成当前的所以修改;当点击取消的时候系统会提示你如果取消的话所有的修改将无效,这个时候你可以选择取消操作或者确定操作;
  • 没有默认值得属性非空判断 如果列的属性没有默认值,java代码判断参数是否为null
  • 字符串长度判断 判断参数的字符串长度是否符合数据库规定的长度,需要自己做非空处理
  • 重新生成是删除原文件 如果重新生成该表,已经存在了该生成后的类是否将已经存在的类删除后重新删除

部分接口方法

AbstractSQL<T>是该工具的核心,所有SQL类都继承该类后实现其抽象方法
tableName() , primaryId() , columns() , propertyValue(T obj) ; 分别代表表名,主键名字,列明,类属性

  • 该方法为通用执行查询
    queryExecute(SqlAndParams qp, SQLConnection conn, Handler<AsyncResult<ResultSet>> handler)
  • 该方法为通用执行更新
    updateExecute(SqlAndParams qp, SQLConnection conn, Handler<AsyncResult<UpdateResult>> handler)
  • getCount()该方法用于获取数据总行数; 该方法有几个重载方法,该方法为示例以下同理
    1. getCount() 该方法用于获取数据总行数
    2. getCount(SqlAssist assist) 该方法用于获取数据总行数,条件使用SqlAssist条件集 SqlAssist
    3. getCount(SQLConnection conn, Handler<AsyncResult<Long>> handler)该方法用于获取数据总行数结果,conn为数据库连接(使用完毕后自动关闭连接),handler为异步结果
    4. getCount(SqlAssist assist, SQLConnection conn, Handler<AsyncResult<Long>> handler)与上一个方法同理只是多了一个条件集
  • selectAll() 该方法用于获取查询所有数据,重载方法与getCount()类似
  • selectAllByPage() 该方法为分页查询数据,通过SqlAssist分页查询出数据总行数与数据
  • selectById() 该方法通过主键查询数据 [当没有主键该方法将子类重写,既需要子类自己实现]
  • selectByObj() 该方法通过对象中属性不为null值做为条件进行查询数据
  • selectSingleByObj() 该方法通过对象中属性不为null值做为条件进行查询数据,如果存在数据只取值第一条
  • insertAll() 该方法将对象保存到数据库中包括属性值为null的属性
  • insertNonEmpty() 该方法将对象属性值不为null的属性保存到数据库
  • updateAllById() 该方法将对象更新到数据库,包括null值,条件为对象中的主键属性值 [当没有主键该方法将子类重写,既需要子类自己实现]
  • updateNonEmptyById() 该方法将对象中属性不为null值的更新到数据库,条件为对象中的主键属性值 [当没有主键该方法将子类重写,既需要子类自己实现]
  • updateAllByAssist() 该方法将对象更新到数据库,包括null值,条件为SqlAssist
  • updateNonEmptyByAssist() 该方法将对象中属性不为null值的更新到数据库,条件为SqlAssist
  • deleteById() 该方法为通过主键删除数据 [当没有主键该方法将子类重写,既需要子类自己实现]
  • deleteByAssist() 该方法为通过SqlAssist删除数据

Assist是特别定制的查询帮助类,一个项目一个Assist类足以在全部地方使用,生成Assist时,系统会自动检测是否存在Assist,如果存在Assist系统不会再次创建;如果不存在才会创建;

Assist支持链式操作,也就是流操作

new Assist().setRowSize(5).setStartRow(10);

distinct去重说明

distinct为是否去除重复的数据,当需要去重时调用Assist对象的setDistinct(boolean)方法;true为去重,不去重则不需要理会

order排序说明

order可以支持多行排序,通过多项的setOrders方法,然后使用SqlAssist的静态方法order添加

assist.setOrders(SqlAssist.order("列名1", true),SqlAssist.order("列名2", false)); 

startRow/rowSize 分页说明

startRow:从第几行开始取数据 注意事项:数据从0开始;

rowSize:每次取多少行数据;

 SqlAssist assist = new SqlAssist ().setStartRow(0).setRowSize(15);//从第1行开始取数据,取15行数据 

resultColumn自定义列说明

resultColumn为自定义返回的列,比如表中有5列,你只想取出2列,这个时候你就可以调用Assist对象的setResultColumn(String resultColumn)方法, 参数为想要取出的列,多个列以逗号,分开;比如要取出id跟名字那么参数的参数值就为===>"id as 别名 , name as 别名";

condition条件集说明

condition属性为条件集,当查询的时需要条件,就可以调用Assist对象的setConditions(SqlWhereCondition... require)方法,参数个数无限,可以直接使用Assist的静态条件方法传入条件;有以下静态条件方法:

静态条件方法使用为:Assist.xxxXxx("表名.列名","值");当只操作一张表或者没有重复列名的时候可以只写列名, 当然如果静态条件方法不满足你也可以新建一个对象传入;

综合示例:

开源说明

开源地址 github : https://github.com/shenzhenMirren/vertx-generator
开源地址 码云 : https://gitee.com/duhua/vertx-generator

                        
The MIT License (MIT)

Copyright (c) 2017 github.shenzhenMirren

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.