前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这次我开源,别再打我啦!

这次我开源,别再打我啦!

作者头像
程序员鱼皮
发布2022-11-07 16:05:12
9490
发布2022-11-07 16:05:12
举报
文章被收录于专栏:鱼皮客栈鱼皮客栈

大家好,我是鲏。

前几天给大家分享了我自制的 代码 + 数据生成工具

虽然这是一个完全免费的工具网站,但仍然有一些热心网友给我送来了 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 => 任意输出:

系统分为以下几个核心模块,各模块职责分明:

  1. Schema 构造器:将各种不同的输入源转为统一的 Table Schema 定义
  2. 统一 Schema 定义:本质是一个 Java 类(JSON 配置),用于保存表和字段的信息
  3. 生成器:负责根据 Schema 生成数据和代码
  4. 共享服务:包括词库、表信息、字段信息共享

Schema 构造器

核心类:TableSchemaBuilder,作用是将不同的参数统一收敛为 TableSchema 对象。

包含如下方法:

其中,buildFromSql(根据 SQL 生成 Schema)使用了 Druid 数据库连接池自带的语法解析器,非常强大。(解析器这种东西一般不要自己写,有这时间你都能做几个项目了,写出来还没人家的好用)

Schema 定义

用于保存表和字段的信息,示例结构如下:

代码语言:javascript
复制
{
  "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)。

统一的生成入口

使用门面模式聚合各种生成类型,提供统一的生成调用和校验方法:

欢迎贡献

由于我本人的时间有限,后续这个项目估计不会做很大的更新。大家感兴趣的话可以自行扩展项目,但是在提交代码前记得要检查是否遵循项目规范哦。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员鱼皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目特点
  • 技术栈
    • 前端
      • 后端
      • 系统设计
        • 整体架构设计
          • Schema 构造器
            • Schema 定义
              • 生成器
                • 多种生成类型
                • 多种模拟数据生成规则
                • 统一的生成入口
            • 欢迎贡献
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档