Skip to content

zhashut/SQL-Generate

Repository files navigation

SQL-Generate

SQL语句生成器

部署文档:https://github.com/zhashut/zhashut.github.io

功能大全

  • 可视化建表
  • 快捷导入建表
    • 智能导入
    • 导入表
    • 导入配置
    • 导入建表 SQL
    • 导入 Excel
  • 一键生成
    • SQL 建表、插入数据语句
    • 模拟数据
    • JSON 数据
    • Go 代码
    • Java 代码
  • 多种模拟数据生成规则
    • 固定值
    • 随机值
    • 正则表达式
    • 递增
    • 定制词库
  • 词库共享
    • 创建词库
    • 词库继承
    • 一键创建字典表
    • 根据词库生成模拟数据
  • 表信息共享
    • 创建表信息
    • 一键复制建表语句
    • 一键导入表
  • 字段共享
    • 创建字段
    • 一键复制创建字段语句
    • 一键导入字段
  • 举报

技术栈

主要技术:

  • Gin
  • Gorm

依赖库:

  • Viper : 配置管理
  • Vitess : 解析 SQL 语句
  • zap : 日志库
  • Excelize : 导入导出
  • Gofakeit :模拟数据
  • template :模板引擎

快速启动

  1. 安装依赖库:go mod tidy
  2. 运行 docs/sql/ 目录下的 create_table.sql 建表
  3. 修改 config-dev.yaml 中的数据库地址为自己的
  4. 已经编写好了 Dockerfile,支持 Docker 镜像部署。
  5. 注意,如果是 Win 系统,是启动不了的,因为用到了 vitess(不支持 Win),要启动需要在 WSL 才可,也可以选择注释掉相关代码
    • 相关代码位置:core/builder/tableSchemaBuilder.go 中的 BuildFromSQL 方法(不要把方法全部注释,因为有引用的地方,注释方法里面的代码即可,返回 nil)和 getExprVal(这个全部注释掉即可)

整体架构设计

核心设计理念:将各输入方式统一为明确的 Schema,并根据 Schema 生成各类内容。

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

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

核心模块的代码都在后端 core 目录下

Schema 构造器

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

Schema 定义

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

{
  "dbName": "库名",
  "tableName": "test_table",
  "tableComment": "表注释",
  "mockNum": 20,
  "fieldList": [{
    "fieldName": "username",
    "comment": "用户名",
    "fieldType": "varchar(256)",
    "mockType": "随机",
    "mockParams": "人名",
    "notNull": true,
    "primaryKey": false,
    "autoIncrement": false
  }]
}

生成器

多种生成类型

将每种生成类型定义为一个 Builder(core/builder 目录):

其中,对于 SQL 代码生成器( SqlBuilder),使用方言来支持不同的数据库类型(策略模式),并使用单例模式 + 工厂模式创建方言实例。

对于 Go、Java代码生成器,编写了 codeBuilderGenertor 模板方法,并通过入参来决定代码生成。使用内置 template 模板引擎。

多种模拟数据生成规则

每种生成规则定义为一个 Generator,使用 DataGeneratorFactory(工厂模式)对多个 Generator 实例进行统一的创建和管理。

使用 Gofakeit 库实现随机数据生成(RandomDataGenerator)。

统一的生成入口

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

共享服务

包括词库、表信息、字段信息共享

About

SQL语句生成器

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors