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

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(须确保此目录为空或不存在):

git clone https://gitee.com/huzgd/RuoYi_ezdml.git D:\RyTest

得到一个标准的maven工程:

image-20250913165023184

这个工程中,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文件数据库。

配置运行

用idea打开工程,可以直接编译运行:

image-20250913170235728

注:若依官方默认使用MYSQL,这里为了方便演示,我们使用了预先配置好的h2文件数据库,且已经创建好了若依的系统表并执行官方初始化脚本;你可以按自己的需要更改为连接自己的数据库。

启动成功后,在浏览器打开:

image-20250913171947639

输入初始用户名密码admin/admin123,登录后就是标准的若依系统了:

image-20250913172109329

修改代码后,系统会自动重启(可开启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助手|生成新模型”命令:

image-20250913172815417

这里我们直接取主题为“进销存管理信息系统”进行生成。

生成模型较简单,字段较少,我们丰富下。选中产品表,右键“AI助手|增加字段”:

image-20250913173115577

分别选中产品、库存、销售三个表重复地执行了几次“AI助手|增加字段”,同时设置主键ID均为自增长:

image-20250913190159569

然后引入若依系统用户表替换users,最终得到以下表结构:

image-20250913174151593

注:由于若依已经有用户表,故删除生成的users用户表,从在线文件( http://ezdml.com/v/?sid=8199fce3e90d4102b61ae58fdb772556 )的模型中复制粘贴若依的系统表sys_user,并将sales.user_id的外键引用改为指向若依的sys_user.user_id:

image-20250913173920785

又:此模型文件也提交到GIT仓库/doc目录了,懒得生成的话也可以直接用。

生成代码

接下来我们为产品、销售、库存生成代码。首先将这三个表的发布类型设置为“菜单入口”,表示要发布成若依的菜单:

image-20250913175707703

选中这三个表,执行“模型|生成代码”,选择“RuoYi_ezdml”模板,输出文件夹为刚才签出代码模板的“D:\RyTest”,点“生成”:

image-20250913175940829

选择其它目录,或未提前checkout代码模板的话,EZDML会提示先从GIT拉取代码模板再生成。

编译运行

生成代码后,回到IDE,会看到生成了controller、domain、mapper、service、html等前后端代码:

image-20250913180343272

由于新生成增加了src目录,直接运行报找不到类的错误,我们执行右边Maven工具中root节点的clean和compile命令进行重新编译:

image-20250913183142767

编译通过后再次启动成功:

image-20250913183317742

打开浏览器,登录,可以看到新增加了“进销存管理信息系统”的菜单,说明生成的代码已经执行了:

在这里插入图片描述

不过点击会报错:

Table “PRODUCTS” not found; SQL statement: SELECT count(0) FROM products

image-20250913183833079

这是因为还没创建表,我们下一步就来创建表结构。

连接JDBC服务

正常情况下我们EZDML需要单独开一个HTTP_JDBC服务连接数据库,但若依这里已经通过JDBC连接数据库了,因此我们在ruoyi-ezdml模块里把EzJdbc服务集成了,只要若依系统启动就可以开启EzJDBC服务:

image-20250913184430791

默认是自动开启,连接密码为ry,在配置文件ezdml.properties中可进行设置(生产系统建议关闭):

image-20250913184529248

系统启动后,在浏览器输入 http://localhost/ruoyi/ezjdbc/ ,出现以下内容说明ezjdbc服务已启动:

image-20250913184949528

回到EZDML,连接数据库时,选择HTTP_JDBC,数据源输入:http://localhost/ruoyi/ezjdbc/ ,密码为ry,用户名随意,即可通过连接JDBC服务:

image-20250913185333648

这种方式省去了单独连接数据库的麻烦,避免连接冲突,只要系统能启动就能通过EZDML连上数据库。

生成数据库

连接成功后,即可生成建表SQL。由于H2数据库的方言结构我们没有专门适配,因此我们勾选粗略模式,只比对字段的逻辑类型。

点击“生成SQL”:

image-20250913185533386

执行:

image-20250913185717330

回到系统,这时列表界面已经可以打开,不再报错了:

image-20250913185913992

增删改查也可以了:

image-20250913190938072

image-20250913191021527

Swagger UI

打开“系统工具|系统接口”菜单,可以看到已经为我们的三个表生成了SwaggerUI接口文档:

image-20250913202508748

细节有待改进,但基本上每个接口都是可以测试使用的了:

image-20250913202625314

Markdown文档

打开“系统工具|EZ文档”菜单,可以看到生成的三个文档,每个文档包含了概述、字典、列表、表单、 JSON、列表查询接口、查询记录接口、添加记录接口、修改记录接口、删除记录接口等。

点Products,效果如下:

image-20250913201755281

image-20250913201823965

image-20250913201918773

在最后面可以查看Markdown源码

image-20250913202257223

Markdown文档完全由脚本模板生成,比Swagger UI的文档更灵活,准确性和可读性也更好。

生成测试数据

刚生成的表数据少不太好看,接下来我们生成点测试数据。

在EZDML中打开产品表属性,切换到“界面”页“台式机”的表格界面,默认生成的假数据确实很假,效果如下:

image-20250913195910108

选中名称、描述、单位等字段,右键执行“AI助手|生成示例值”:

image-20250913200059668

在弹出的界面中输入主题并发送:

image-20250913200236212

最后效果如下:

image-20250913200329922

同样的对库存表的存储位置、状态、批次号,销售表的支付方式、配送地址、订单状态等字段执行“AI助手|生成示例值”:

image-20250913200638144

image-20250913200756243

这时生成的假数据已经非常好看了,我们执行EZDML主菜单“模型|生成测试数据”,对这三个表都生成60条记录:

image-20250913201053816

检查生成的SQL无误,执行:

image-20250913201201687

执行完成后,通过数据SQL可查到结果:

image-20250914002134531

回到浏览器,刷新即可看到新生成的记录:

image-20250913201341829

界面设计

列表界面

下面我们对产品界面作一些调整。首先是列表,默认几乎显示了所有字段,价格排在名称前面,显然是不对的。这个在EZDML的产品界面上也是一样的:

image-20250913200329922

我们先调一下顺序,直接拖动把价格移到后面,产品描述移前:

image-20250913211732938

后面那些类型、供应商、重量、宽度什么的都不需要在表格显示,将其中表格中移除(仍会在表单中显示):

image-20250913211934344

最终效果如下:

image-20250913212058418

重新生成代码再运行,也就清爽了:

image-20250913212252952

表单界面

接下来我们来看表单界面,顺序已经跟随列表一起改过来了:

image-20250913212813965

其中产品类别和供应商这两个表我们还没有设计,我们先把它隐藏。在EZDML里打开产品界面,切换到表单,将这两个字段隐藏:

image-20250913213146106

另外,最后更新时间我们不希望用户输入,把它设置成只读:

image-20250913213348332

库存单位默认是文本输入框,我们改成下拉框:

image-20250913213559854

AI生成的数据项(数据生成规则)令人难以满意,我们把它清了:

image-20250913213719656

然后在值列表中输入我们习惯的选项——件、箱、包、公斤、升、米、个:

image-20250913214018896

重新生成代码运行,效果如下:

image-20250913214248496

表单验证

首先我们设置产品名称为必填,并去除头尾空格:

image-20250913215029050

接着设置库存数量的数据格式为数值,最小值1,最大值999:

image-20250913215515521

重新生成代码运行,可验证以上规则有效:

image-20250913215748486

image-20250913220550087

脚本规则

我们简单演示下脚本规则。假设我们要在保存时在后端检测产品描述,禁止使用国家级、最高级、最佳、第一、唯一、首个、最好、顶级、首家、最先进之类的词语,配置步骤如下:

在产品表属性窗口标签上右键打开脚本规则:

image-20250913221543658

添加一条规则,内容如下:

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;

image-20250913221745582

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

image-20250913222025081

编译运行:

image-20250913222458479

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

单元测试

目前我们为每个表生成了Controller和Service的REST接口相关的测试代码。测试时发现如果直接在Ruoyi-ezdml模块下生成测试代码,则需要显式引用Ruoyi-admin以启用SpringBoot上下文环境,从而导致循环引用;为了避免这个问题,我们将代码生成到了Ruoyi-admin下:

image-20250913203905583

在test/java上右键执行Run ‘All Test’,即可启动测试:

image-20250913204102552

每个表10个测试,共30个,测试通过:

image-20250913204537361

小结

现在AI编程工具层出不穷,生成代码貌似已经落后了。但AI在复杂逻辑处理方面还无法取代人类,CRUD代码生成仍然有意义。

只需要一个模型,EZDML就可以基于若依框架生成表结构、前后端代码、REST接口、Swagger UI、Markdown文档、单元测试等内容,支持表单验证、脚本规则,易于扩展,比之前的单模块生成大有改进,基本上提供全套一条龙服务了。当然细节问题不少,还需要继续完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值