EZDML 数据建模

超轻量级的免费数据建模工具

0%

EZDML快速生成若依(Ruoyi)多模块全套代码和文档

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仓库链接如下:

https://gitee.com/huzgd/RuoYi_ezdml.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
script JAVA detectDesc(SAVE): STRING; //id: 1//
//检测描述
start
String[] bwords=new String[]{
"国家级",
"最高级",
"最佳",
"第一",
"唯一",
"首个",
"最好",
"顶级",
"首家",
"最先进"
};
String desc=OBJ.getDescription();
if(desc!=null)
for(String w: bwords){
if(desc.contains(w))
error("产品描述不能有绝对化用语 - "+w);
}

end script;

保存重新生成代码,这段脚本会出现在代码中:

编译运行:

可以看到脚本确实执行了。

单元测试

目前我们为每个表生成了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文档、单元测试等内容,支持表单验证、脚本规则,易于扩展,比之前的单模块生成大有改进,基本上提供全套一条龙服务了。当然细节问题不少,还需要继续完善。