本文作者:程序员鱼皮
大家好,我是鲏。
前几天给大家分享了我自制的 代码 + 数据生成工具 :
虽然这是一个完全免费的工具网站,但仍然有一些热心网友给我送来了 DDOS 流量包,在这里非常 感谢 大家对本网站的认可,但还是希望大家手下留情。
我早就猜到事情会这样,所以早就做好了开源的打算。这样万一网站再次挂掉,大家也可以直接用现成的代码自己部署一套!够意思吧~
开源代码如下:
- 前端:https://github.com/liyupi/sql-father-frontend-public
- 后端:https://github.com/liyupi/sql-father-backend-public
感兴趣的同学自取即可。
此外,为了帮助大家更好地学习和理解这个项目,我还录制了一期视频来讲解项目的技术、运行、设计和源码,5 分钟就能快速上手,戳这里查看:**https://www.bilibili.com/video/BV1hG411L79U/**(有帮助的话希望给个三连哈哈)
下面也用文字简单介绍下这个项目。
项目本身功能完整(分为用户前台和管理后台)、达到上线标准、架构设计清晰、目录结构规范。
前端用到了复杂的嵌套 & 动态 & 可折叠表单、代码编辑器;后端用到了多种主流设计模式、AOP 切面鉴权等,还是非常值得朋友们学习的。
这里我选用的都是主流的、我自己用的比较熟练的技术。
主要技术:
- React 18
- Umi 4.x
- Ant Design 4.x 组件库
- Ant Design Pro Components 高级组件
- TypeScript 类型控制
- Eslint 代码规范控制
- Prettier 美化代码
依赖库:
- monaco-editor 代码编辑器
- copy-to-clipboard 剪切板复制
代码编辑器
主要技术:
- Spring Boot 2.7.x
- MyBatis Plus 3.5.x
- MySQL 8.x
- Spring AOP
依赖库:
- FreeMarker:模板引擎
- Druid:SQL 解析
- datafaker:模拟数据
- Apache Commons Lang3:工具库
- Hutool:工具库
- Gson:Json 解析
- Easy Excel:Excel 导入导出
- Knife4j:接口文档生成
核心设计理念:将各输入方式统一为明确的 Schema,并根据 Schema 生成各类内容。
架构设计图如下,即任意输入 => 统一 Schema => 任意输出:
系统分为以下几个核心模块,各模块职责分明:
- Schema 构造器:将各种不同的输入源转为统一的 Table Schema 定义
- 统一 Schema 定义:本质是一个 Java 类(JSON 配置),用于保存表和字段的信息
- 生成器:负责根据 Schema 生成数据和代码
- 共享服务:包括词库、表信息、字段信息共享
核心类:TableSchemaBuilder,作用是将不同的参数统一收敛为 TableSchema 对象。
包含如下方法:
其中,buildFromSql(根据 SQL 生成 Schema)使用了 Druid 数据库连接池自带的语法解析器,非常强大。(解析器这种东西一般不要自己写,有这时间你都能做几个项目了,写出来还没人家的好用)
用于保存表和字段的信息,示例结构如下:
{
"dbName": "库名",
"tableName": "test_table",
"tableComment": "表注释",
"mockNum": 20,
"fieldList": [{
"fieldName": "username",
"comment": "用户名",
"fieldType": "varchar(256)",
"mockType": "随机",
"mockParams": "人名",
"notNull": true,
"primaryKey": false,
"autoIncrement": false
}]
}
将每种生成类型定义为一个 Builder:
其中,对于 SQL 代码生成器( SqlBuilder),使用方言来支持不同的数据库类型(策略模式),并使用单例模式 + 工厂模式创建方言实例。
对于 Java、前端代码生成器(JavaCodeBuilder、FrontendCodeBuilder),使用 FreeMarker 模板引擎来生成。模板代码如下:
每种生成规则定义为一个 Generator,使用 DataGeneratorFactory(工厂模式)对多个 Generator 实例进行统一的创建和管理。
使用 dataFaker 库实现随机数据生成(RandomDataGenerator)。
使用 Generex 库实现正则表达式数据生成(RuleDataGenerator)。
使用门面模式聚合各种生成类型,提供统一的生成调用和校验方法:
由于我本人的时间有限,后续这个项目估计不会做很大的更新。大家感兴趣的话可以自行扩展项目,但是在提交代码前记得要检查是否遵循项目规范哦。
最后,欢迎学编程的朋友们加入我的 编程导航(访问 https://yupi.icu 了解详情),带你一起学编程、做项目、向鱼皮 1 对 1 提问、帮你做学习和求职的规划指导、修改简历等。我会在圈子内带大家从 0 到 1 分析解读这个项目,争取让大家项目经历 +1。可以加我微信 yupi5927,备注【加入编程导航】和自己的情况优惠加入编程导航,不备注不通过,非诚勿扰谢谢。