关于 Spring-generator

Spring-generator的前生是 MyBatis-CMEU,由于MyBatis-CMEU是当时在需要快速使用的情况下开发的所有很多东西不能拓展也不方便使用所以Spring-generator就诞生了
Spring-generator是基于javafx8开发的图形界面代码生成器!
使用 Apache FreeMarker 作为代码文件的模板生成代码;
默认生成MyBatis的Dao并配有MyBatis的查询帮助工具Assist,但它并不仅仅局限于生成某种风格的代码,它的使命是将数据库中表的属性提取为实体类属性,剩下的事情就取决你如何使用FreeMarker操作它
Spring-generator不是框架它不会影响任何现有的结构,Spring-generator只是一个生成工具,不拘于语言,只取决于你怎么使用FreeMarker编写模板,Assist是一个非常好用的帮助工具配合动态Mapper很完美 官方QQ交流群号: 519714660
  1. 生成实体类
  2. 生成WEB API相关接口 Controller
  3. 生成业务逻辑相关的Service/ServiceImpl
  4. 生成操作数据库的Dao接口与Mapper.xml映射文件
  5. 生成单元测试
  6. 软件最大的特色就是操作SQL类的Assist查询帮助类(Assist是特别定制的查询工具,使用该工具一切操作都会变得超简单,比如:分页通过Assist只需要设置2个参数就可以实现,比如参数1=10,参数2=5,查询出来就是第10行到15行的数据,同时也可以防注入动态添加查询添加,去重,排序,自定义返回列等);
主界面
主界面

config:存放软件的配置信息,ConfigDB.db是SQLite数据库文件,当升级版本时可以将该文件代替新版本便可以保留原有的数据;

libs:存放Spring-generator运行所需要的jar包以及数据库驱动jar包

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

template:存放生成模板,如果要恢复默认模板删除该文件夹便可以;

运行环境要求:
通用jar版:该工具是基于jdk1.8.0_121,工具使用的特性中已知最低要求是jdk1.8.0_40,理论上1.8.0_40以上都可以使用该工具, 如果已经配置了java运行环境双击运行或者在终端java -jar Spring-Generator.jar运行;
无需JDK要求版:无JDK要求版,可以自己下载一个1.8_121以上的jre,然后自己写一个脚本使用下载的jre执行执行本工具,或者到QQ交流群中下载已经打包了的包

                        
%Windows下指定jre的.bat脚本,将jre包放在工具根目录%
set path=jre\bin
start java -jar Spring-Generator.jar
                        
                        
#unix下指定jre的sh脚本,将jre包放在工具根目录
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
set path = Contents/Home/bin #设置你jre的bin路径
java -jar $DIR/Spring-Generator.jar
                        

使用说明

Spring-generator生成后最大的核心类就是 Assist
Assist是一个帮助类,也就是条件类,可以用它来添加条件,排序,去重,分页等;
然后就是模板,Spring-generator的责任是将数据库中表的属性取出来并结合项目需要其他属性形成一个content,你需要通过FreeMarker操作content生成代码
打开Spring-generator第一步:数据库连接(既连接一个数据库),第二步:选择要生成的表(也可以全库),第三步:选择要生成到那个目录下,第四步:执行生成
  • 1.数据库连接
    连接到现有的数据库,连接完成后会显示在序号⑸中, 数据库连接
  • 2.配置信息
    管理现有的配置信息,比如加载或者删除等, 配置信息
  • 3.使用说明
    使用说明包括软件当前版本号,文档地址,源码地址,以及模板仓库地址
  • 4.设置
    可以设置语言切换,目前支持中文与英文
  • 5.数据库列表
    当添加数据库连接后,可以双击显示数据库中所以的表,也可以用过右键,全库生成/打开/关闭/修改/删除现有的数据库连接;
    全库生成既将当前数据库中所有的表都生成
  • 6.项目所在目录
    输入或者通过按钮选择将文件生成到某个目录
  • 7.表的名字
    通过双击选择所要创建的表名将表的信息加载至右侧数据面板;
  • 8.相关类的包名
    可以设置类所在的包名
  • 9.相关类的类名
    可以设置类所在的包名,可以修改名字的类名字,需要留一个{c}占位符用于将表名帕斯卡后填充为类名
  • 10.自定义包名与类名相关
    进入设置后可以添加自定义包名与类名
  • 11.自定义属性相关
    进入设置后可以添加自定义的属性名字
  • 12.设置文件输出的编码格式
    可以设置文件内容以什么编码格式输出
  • 13.执行创建
    当所有地方设置选择完毕以后就可以点击执行创建
  • 14.保存配置
    保存配置的范围,包括首页的数据与设置的数据,系统默认识别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再执行

全库生成第一步选择生成文件的存放路径,第二步在你想生成的数据库右键选择全库生成确定就可以了

全库生成第一步选择生成文件的存放路径,第二步双击或右键打开数据库,双击想要生成的表后选择执行创建

当不想创建某些类时,只需要将模板设置为空白就可以了,当系统碰到空白模板名称时自动忽略不创建,示例:比如不想创建UnitTest类时,只需要进UnitTest设置将使用模板设置为空白

模板说明

FreeMarker模板生成时需要用的数据,系统已经封装为content,在使用中可以使用content.xxx进行获取数据,现版本中content已经提供了12个属性,会在下文中展示,使用示例:content.entity.className 获取实体类的名称

                        
content
  ┣━ database = 数据库配置文件(属性类)
  ┣━ entity = 实体类属性(属性类)
  ┣━ table = 数据库表属性(属性类)
  ┣━ service = Service属性(属性类)
  ┣━ serviceImpl = ServiceImpl属性(属性类)
  ┣━ dao = Dao类属性(属性类)
  ┣━ mapper = Mapper属性(属性类)
  ┣━ controller = Controller属性(属性类)
  ┣━ unitTest = 单元测试属性(属性类)
  ┣━ assist = Assist属性(属性类)
  ┣━ custom = 自定义包与类属性(属性类)
  ┗━ customProperty = 自定义属性(属性类)
                        
                    
                        
database说明
  ┣━ displayName = 在首页中显示的名字(String)
  ┣━ host = 主机地址(String)
  ┣━ port = 端口号(String)
  ┣━ userName = 用户名(String)
  ┣━ userPwd = 密码(String)
  ┣━ dbName = 数据库名称(String)
  ┣━ dbType = 数据库类型(String)
  ┗━ encoding = 字符编码(String)
                        
                    
                        
entity
  ┣━ classPackage = 实体类的包名(String)
  ┣━ className = 实体类的类名(String)
  ┣━ classNameLower = 实体类的类名首字母小写(String)
  ┣━ tableName = 数据库表的名字(String)
  ┣━ tableAlias = 数据库表的别名(String)
  ┣━ primaryKey = 表中的主键(String)
  ┣━ primaryKeyJdbcType = 主键的数据库数据类型(String)
  ┣━ primaryKeyJavaType = 主键的java数据类型(String)
  ┣━ primaryKeyAttr = 主键的实体类的属性信息(属性类)//属性值与attrs一致
  ┣━ cantNullAttrs = 不能为空的属性(List属性类)//属性值与attrs一致
  ┣━ otherAttrs = 其他属性(List属性类)//属性值与attrs一致
  ┗━ attrs = 所有实体类的属性信息(List属性类)
       ┣━ create = 是否创建(String)
       ┣━ field = 属性的字段名字(String)
       ┣━ fieldPascal = 属性字段名字首字符大小(String)
       ┣━ fget = 字段的get方法名,如果变量为boolean 类型为字段的is方法名(String)
       ┣━ fset = 字段的set方法名(String)
       ┣━ fgetType = 字段的获取类型的方法名,比如字符串getString(String)
       ┣━ fsetType = 字段的设置类型的方法名,比如字符串setString(String)
       ┣━ javaType = 字段java的数据类型(String)
       ┣━ nullable = 是否允许使用 NULL值,true = 明确允许使用 NULL值,false = 可能不允许使用 NULL值(不明确是否允许使用NULL值)(boolean)
       ┣━ columnName = 列的名称(String)
       ┣━ columnDef = 列的默认值(String)
       ┣━ remarks = 列的注释(String)
       ┣━ columnSize = 列的大小,对于 字符串 或 date 类型,列的大小是最大字符数,对于 numeric 和 decimal 类型,列的大小就是精度(int)
       ┣━ typeName = 数据库数据类型名称,对于 UDT,该类型名称是完全限定的(String)
       ┣━ decimalDigits = 小数部分的位数(int)
       ┗━ ordinalPosition = 表中的列的顺序(从 1 开始)(int)
                        
                    
                        
table
  ┣━ tableCat = 表类别(可为 null)(String)
  ┣━ tableSchem = 表模式(可为 null)(String)
  ┣━ tableName = 表名称(String)
  ┣━ tableType = 表类型。典型的类型是 "TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM(String)
  ┣━ remarks = 表的解释性注释(String)
  ┣━ typeCat = 类型的类别(可为 null)(String)
  ┣━ typeSchem = 类型模式(可为 null)(String)
  ┣━ typeName = 类型名称(可为 null)(String)
  ┣━ selfReferencingColName = 有类型表的指定 "identifier" 列的名称(可为 null)(String)
  ┗━ refGeneration = 指定在 SELF_REFERENCING_COL_NAME 中创建值的方式。这些值为 "SYSTEM"、"USER" 和 "DERIVED"。(可能为null)(String)
                        
                    
                        
custom说明
  ┗━ item = custom类的属性(Map.key=String)
         ┣━ key = key值(String)
         ┣━ packageName = 包名(String)
         ┣━ className = 类名(String)
         ┗━ templateValue = 模板的名字(String)
                        
                    
                        
customProperty说明
  ┗━ item = customProperty类的属性(Map.key=String)
         ┣━ key = key值(String)
         ┣━ value = value值(String)
         ┗━ describe = 描述值(String)
                        
                    
                        
Service,ServiceImpl,Dao,Controller,UnitTest,SqlAssist,AbstractSql,SqlAndParams说明
  ┣━ classPackage = 类的包名(String)
  ┣━ className = 类的类型(String)
  ┗━ item = 类的属性(Map.key=String)
         ┣━ key = key值(String)
         ┣━ value = value值(String)
         ┗━ describe = 描述值(String)
                        
                    

Assist使用说明

Assist是特别定制的查询帮助类,一个项目一个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:每次取多少行数据;
Assist assist = new Assist ().setStartRow(0).setRowSize(15);//从第1行开始取数据,取15行数据 

resultColumn自定义列说明


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

require条件集说明


require属性为条件集,当查询的时需要条件,就可以调用Assist对象的andXXX或者orXXX默认忽略where 后面第一个and或or
示例:assist.andEq("id",1) 结果查询的SQL语句就是: where id = 1
                    

综合示例:

拓展/二次开发

本工具使用javafx开发,有javafx的基础知识就可以做二次开发

在pom.xml文件中添加jar包的dependency依赖,在com.szmirren.spi.DatabaseTypeNames类的dbTypeNames方法中添加数据库名字

语言在/Spring-generator/src/main/resources/config/language/文件夹中,语言命名规范为language_地区代码.properties,可以取现有的任意一个文件,按里面的key更改值就可以了

开源说明

开源地址 github : https://github.com/shenzhenMirren/Spring-generator
开源地址 码云 : https://gitee.com/duhua/Spring-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.