EZDML新版支持快速生成若依(Ruoyi)多模块工程代码和文档的模板。跟之前生成Ruoyi-fast单模块相比,多模块版有全新的变化:
- 完全独立,拷贝两个目录就可以集成到已有系统中
- 集成EZJDBC服务,启动后EZDML可直连,共享若依的数据库连接
- 集成Swagger UI,自动生成REST调试接口和Swagger文档
- 集成单元测试,自动生成单元测试代码
- 集成Markdown,自动生成接口文档说明
- 脚本机制,提供脚本规则上下文,支持输出JAVA和SQL脚本代码,实现自定义业务逻辑
下面简单介绍一下。
以下操作基于EZDML for win64 v3.69进行。
下载GIT模板
以往EZDML都是自带代码模板,但若依的工程比较大,搞得安装包很臃肿。因此从EZDML 3.68起,较大的模板转到GIT仓库,方便维护更新。EZDML在生成代码时发现模板缺失会提示用户先行下载,为避免节外生枝,我们这里先行下载。
EZDML生成若依(Ruoyi)多模块工程代码模板GIT仓库链接如下:
假定本地目录为D:\RyTest,我们执行以下命令拉取代码和模板到D:\RyTest(须确保此目录为空或不存在):
1 | git clone https://gitee.com/huzgd/RuoYi_ezdml.git D:\RyTest |
得到一个标准的maven工程:
这个工程中,EZDML相关的目录有三个:
- ruoyi-ezdml——EZDML的运行框架(需添加到root/admin的pom.xml编译安装)
- ruoyi-ezpub——EZDML生成的代码(由EZDML生成,需添加到root/admin的pom.xml编译安装)
- ruoyi-ezpub-tmpl——代码模板(不需要添加到root/admin的pom.xml,不参与编译安装)
其它目录均为若依的官方内容(参见 https://gitee.com/y_project/RuoYi ,目前版本为4.8),只是修改了根目录和ruoyi-admin的pom.xml增加依赖内容,以及增加了为方便演示用的h2文件数据库。
配置运行
跟以往一样,执行根目录的ryezstart.cmd,可以直接通过命令行安装运行:
不过这回我们换下口味,改用IDE试试。用idea打开工程,也是可以直接编译运行的:
注:若依官方默认使用MYSQL,这里为了方便演示,我们使用了预先配置好的h2文件数据库(./doc/ezrytest_db.mv.db,正常./doc是定位在根目录,但有时会定到ruoyi-admin下,因此在那也放了一份),且已经创建好了若依的系统表并执行官方初始化脚本;你可以按自己的需要更改为连接自己的数据库。
启动成功后,在浏览器打开:
输入初始用户名密码admin/admin123,登录后就是标准的若依系统了:
修改代码后,系统会自动重启(可开启Hot-swap减少重启),因此后面我们会频繁地重启登录系统,为减少登录工作,建议作以下配置处理:
- 修改初始密码
- 关闭验证码——修改application.yml,设置shiro.user.captchaEnabled为false
- 使用固定缓存——修改ehcache-shiro.xml,设置磁盘缓存位置如:diskStore path=”D:/RyTest/ezry_ehcache”
- 启用固定Shiro密钥——修改application.yml,设置shiro.cookie.cipherKey(需要自己生成密钥,如果懒得弄,可用我的:mX1Pm8UiPttK19chEvbjXg==)
- 记住密码
经过以上配置后,浏览器就可以记住密码,重启后不再需要登录了。
生成模型
接下来我们用EZDML生成一个演示模型。打开EZDML,新建文件,执行“AI助手|生成新模型”命令:
这里我们直接取主题为“进销存管理信息系统”进行生成。
生成模型较简单,字段较少,我们丰富下。选中产品表,右键“AI助手|增加字段”:
分别选中产品、库存、销售三个表重复地执行了几次“AI助手|增加字段”,同时设置主键ID均为自增长:
然后引入若依系统用户表替换users,最终得到以下表结构:
注:由于若依已经有用户表,故删除生成的users用户表,从在线文件( http://ezdml.com/v/?sid=8199fce3e90d4102b61ae58fdb772556 )的模型中复制粘贴若依的系统表sys_user,并将sales.user_id的外键引用改为指向若依的sys_user.user_id:
又:此模型文件也提交到GIT仓库/doc目录了,懒得生成的话也可以直接用。
生成代码
接下来我们为产品、销售、库存生成代码。首先将这三个表的发布类型设置为“菜单入口”,表示要发布成若依的菜单:
选中这三个表,执行“模型|生成代码”,选择“RuoYi_ezdml”模板,输出文件夹为刚才签出代码模板的“D:\RyTest”,点“生成”:
选择其它目录,或未提前checkout代码模板的话,EZDML会提示先从GIT拉取代码模板再生成。
编译运行
生成代码后,回到IDE,会看到生成了controller、domain、mapper、service、html等前后端代码:
由于新生成增加了src目录,直接运行报找不到类的错误,我们执行右边Maven工具中root节点的clean和compile命令进行重新编译:
编译通过后再次启动成功:
打开浏览器,登录,可以看到新增加了“进销存管理信息系统”的菜单,说明生成的代码已经执行了:
不过点击会报错:
Table “PRODUCTS” not found; SQL statement: SELECT count(0) FROM products
这是因为还没创建表,我们下一步就来创建表结构。
连接JDBC服务
正常情况下我们EZDML需要单独开一个HTTP_JDBC服务连接数据库,但若依这里已经通过JDBC连接数据库了,因此我们在ruoyi-ezdml模块里把EzJdbc服务集成了,只要若依系统启动就可以开启EzJDBC服务:
默认是自动开启,连接密码为ry,在配置文件ezdml.properties中可进行设置(生产系统建议关闭):
系统启动后,在浏览器输入 http://localhost/ruoyi/ezjdbc/ ,出现以下内容说明ezjdbc服务已启动:
回到EZDML,连接数据库时,选择HTTP_JDBC,数据源输入:http://localhost/ruoyi/ezjdbc/ ,密码为ry,用户名随意,即可通过连接JDBC服务:
这种方式省去了单独连接数据库的麻烦,避免连接冲突,只要系统能启动就能通过EZDML连上数据库。
生成数据库
连接成功后,即可生成建表SQL。由于H2数据库的方言结构我们没有专门适配,因此我们勾选粗略模式,只比对字段的逻辑类型。
点击“生成SQL”:
执行:
回到系统,这时列表界面已经可以打开,不再报错了:
增删改查也可以了:
Swagger UI
打开“系统工具|系统接口”菜单,可以看到已经为我们的三个表生成了SwaggerUI接口文档:
细节有待改进,但基本上每个接口都是可以测试使用的了:
Markdown文档
打开“系统工具|EZ文档”菜单,可以看到生成的三个文档,每个文档包含了概述、字典、列表、表单、 JSON、列表查询接口、查询记录接口、添加记录接口、修改记录接口、删除记录接口等。
点Products,效果如下:
在最后面可以查看Markdown源码
Markdown文档完全由脚本模板生成,比Swagger UI的文档更灵活,准确性和可读性也更好。
生成测试数据
刚生成的表数据少不太好看,接下来我们生成点测试数据。
在EZDML中打开产品表属性,切换到“界面”页“台式机”的表格界面,默认生成的假数据确实很假,效果如下:
选中名称、描述、单位等字段,右键执行“AI助手|生成示例值”:
在弹出的界面中输入主题并发送:
最后效果如下:
同样的对库存表的存储位置、状态、批次号,销售表的支付方式、配送地址、订单状态等字段执行“AI助手|生成示例值”:
这时生成的假数据已经非常好看了,我们执行EZDML主菜单“模型|生成测试数据”,对这三个表都生成60条记录:
检查生成的SQL无误,执行:
执行完成后,通过数据SQL可查到结果:
回到浏览器,刷新即可看到新生成的记录:
界面设计
列表界面
下面我们对产品界面作一些调整。首先是列表,默认几乎显示了所有字段,价格排在名称前面,显然是不对的。这个在EZDML的产品界面上也是一样的:
我们先调一下顺序,直接拖动把价格移到后面,产品描述移前:
后面那些类型、供应商、重量、宽度什么的都不需要在表格显示,将其中表格中移除(仍会在表单中显示):
最终效果如下:
重新生成代码再运行,也就清爽了:
表单界面
接下来我们来看表单界面,顺序已经跟随列表一起改过来了:
其中产品类别和供应商这两个表我们还没有设计,我们先把它隐藏。在EZDML里打开产品界面,切换到表单,将这两个字段隐藏:
另外,最后更新时间我们不希望用户输入,把它设置成只读:
库存单位默认是文本输入框,我们改成下拉框:
AI生成的数据项(数据生成规则)令人难以满意,我们把它清了:
然后在值列表中输入我们习惯的选项——件、箱、包、公斤、升、米、个:
重新生成代码运行,效果如下:
表单验证
首先我们设置产品名称为必填,并去除头尾空格:
接着设置库存数量的数据格式为数值,最小值1,最大值999:
重新生成代码运行,可验证以上规则有效:
脚本规则
我们简单演示下脚本规则。假设我们要在保存时在后端检测产品描述,禁止使用国家级、最高级、最佳、第一、唯一、首个、最好、顶级、首家、最先进之类的词语,配置步骤如下:
在产品表属性窗口标签上右键打开脚本规则:
添加一条规则,内容如下:
1 | script JAVA detectDesc(SAVE): STRING; //id: 1// |
保存重新生成代码,这段脚本会出现在代码中:
编译运行:
可以看到脚本确实执行了。
单元测试
目前我们为每个表生成了Controller和Service的REST接口相关的测试代码。测试时发现如果直接在Ruoyi-ezdml模块下生成测试代码,则需要显式引用Ruoyi-admin以启用SpringBoot上下文环境,从而导致循环引用;为了避免这个问题,我们将代码生成到了Ruoyi-admin下:
在test/java上右键执行Run ‘All Test’,即可启动测试:
每个表10个测试,共30个,测试通过:
小结
现在AI编程工具层出不穷,生成代码貌似已经落后了。但AI在复杂逻辑处理方面还无法取代人类,CRUD代码生成仍然有意义。
只需要一个模型,EZDML就可以基于若依框架生成表结构、前后端代码、REST接口、Swagger UI、Markdown文档、单元测试等内容,支持表单验证、脚本规则,易于扩展,比之前的单模块生成大有改进,基本上提供全套一条龙服务了。当然细节问题不少,还需要继续完善。