文章

自用前后端代码生成器

项目名称:universal-code-generator、简称ucg

项目开源地址:https://github.com/boommanpro/yudao-boot-mini/tree/feature/universal-code-generator

最新release下载地址:https://github.com/boommanpro/yudao-boot-mini/releases/tag/1.1.0(仅需依赖mysql即可启动,release具有全部依赖,前端已经打包好)

背景

团队人员比较多,涉及项目比较多,需要保持一套标准且可以快速迭代的方式,避免简单的CRUD占用太多时间,遂二开yudao-mini的代码生成,效果如下:

项目展示

①项目管理

你可以管理多个代码项目,他是总的入库,如果你管理多个项目,可以为每个项目定制一套模板和变量规则。

注意:支持复制,导入和导出,可以跨部门分享方案。

②变量管理

你在代码模板里面需要使用到的变量都可以在这里维护,理论来说当前变量已经可以满足大多数情况。

支持SpringEL扩展变量,后序可扩展更多语法。

③代码模板

你可以管理和维护代码模板,生成后的路径,在线管理你的模板。

支持批量删除,因为导入模板后可能很多都没有用。

④模板在线编辑

你可以在线编辑模板,且使用的是vs-code的编辑器哦。如果你的项目也想引入:https://boommanpro.cn/post/vue3-vite-monaco-editor

⑤代码生成

在原本基础上添加批量预览,且批量预览后可以批量下载的功能~

实现思路

数据库设计如下:

通过项目、项目变量、项目代码模板等维护一套项目维度的模板。

create table ucg_project
(
    id                  bigint auto_increment comment '编号,自增,唯一标识一个项目'
        primary key,
    project_name        varchar(128)                                                     not null comment '项目名称,不能为空',
    project_description text                                                             null comment '项目描述,文本类型,可以为空',
    enable_status       bit                                    default b'1'              not null comment '启动状态',
    creator             varchar(64) collate utf8mb4_unicode_ci default ''                null comment '创建者,默认为空字符串',
    create_time         datetime                               default CURRENT_TIMESTAMP not null comment '创建时间,默认为当前时间戳',
    updater             varchar(64) collate utf8mb4_unicode_ci default ''                null comment '更新者,默认为空字符串',
    update_time         datetime                               default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间,默认为当前时间戳,更新记录时自动更新',
    deleted             bit                                    default b'0'              not null comment '是否删除,位类型,默认为0(未删除)'
)
    comment '存储项目的基本信息';

create table ucg_project_variable
(
    id                  bigint auto_increment comment '编号,自增,唯一标识一个项目变量'
        primary key,
    project_id          bigint                                                           not null comment '工厂ID,与`ucg_project`表的`id`相关联,标识所属项目',
    variable_name       varchar(255)                                                     not null comment '变量名称,不能为空',
    expression_type     varchar(16)                                                      not null comment '表达式类型,标识变量的表达式类型,不能为空',
    variable_expression varchar(128)                                                     not null comment '变量表达式,标识变量的具体表达式,不能为空',
    execute_order       int                                    default 1                 null comment '执行顺序,默认为1',
    creator             varchar(64) collate utf8mb4_unicode_ci default ''                null comment '创建者,默认为空字符串',
    create_time         datetime                               default CURRENT_TIMESTAMP not null comment '创建时间,默认为当前时间戳',
    updater             varchar(64) collate utf8mb4_unicode_ci default ''                null comment '更新者,默认为空字符串',
    update_time         datetime                               default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间,默认为当前时间戳,更新记录时自动更新',
    deleted             bit                                    default b'0'              not null comment '是否删除,位类型,默认为0(未删除)'
)
    comment '存储与项目相关的变量信息';

create table ucg_code_template
(
    id                   bigint auto_increment comment '编号,自增,唯一标识一个代码模板',
    project_id           bigint                                                           not null comment '项目id',
    template_name        varchar(128)                                                     not null comment '模板名称,不能为空',
    template_description varchar(256)                                                     null comment '模板描述',
    template_type        varchar(128)                                                     not null comment '模板类型 SERVER  FRONT',
    template_type_value  varchar(128)                                                     not null comment '模板类型值',
    file_type            varchar(128)                                                     not null comment '文件类型,标识模板的文件类型,不能为空',
    file_path_expression varchar(512)                                                     not null comment '文件路径,长文本类型,标识模板文件的存储路径,不能为空',
    original_path        varchar(512)                                                     null comment '原始路径',
    template_content     longtext                                                         not null comment '模板内容,长文本类型,存储模板的具体内容,不能为空',
    creator              varchar(64) collate utf8mb4_unicode_ci default ''                null comment '创建者,默认为空字符串',
    create_time          datetime                               default CURRENT_TIMESTAMP not null comment '创建时间,默认为当前时间戳',
    updater              varchar(64) collate utf8mb4_unicode_ci default ''                null comment '更新者,默认为空字符串',
    update_time          datetime                               default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间,默认为当前时间戳,更新记录时自动更新',
    deleted              bit                                    default b'0'              not null comment '是否删除,位类型,默认为0(未删除)',
    primary key (id, project_id)
)
    comment '存储代码模板的基本信息';

更多优化

因为定义的是代码模板生成工具,所以项目需要最简化启动部署,仅需mysql即可启动,无需部署nginx配置前端,无需部署redis等服务。