gf-codegen

module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2022 License: MIT

README

gf-codegen 代码生成

安装 dbimport 和 codegen
git clone https://github.com/WesleyWu/gf-codegen.git
cd dbimport
go install
cd ..
cd codegen
go install
关于代码生成

基于数据库表结构生成完整的前后端CRUD代码。

1. 使用代码生成步骤

1). 导入表结构

在项目根路径下执行 dbimport,根据表结构自动生成一到多个{tableName}.yaml配置文件,每个表对应一个配置文件

命令行参数:

  • --dblink 类似 mysql:user:pass@tcp(localhost:3306)/db_name?charset=utf8mb4&parseTime=true&loc=Local 的数据库连接定义
  • --tables 指定生成哪些表名的 yaml 文件,多个表名用半角逗号分隔
  • --tablePrefixOnly 只需要哪些前缀的表,多个前缀用半角逗号分隔
  • --removeTablePrefix 生成时,对应的go文件名需要去掉哪些前缀,多个前缀用半角逗号分隔
  • --backendPackage 后端package名称,通常格式是 GoModuleName/Dir1/Dir2/Dir3 或 Dir1/Dir2/Dir3 (可以不指定GoModuleName),go文件会被放置到相对于项目根路径的 /Dir1/Dir2/Dir3 目录下
  • --frontendModule 前端文件所在目录,通常格式是 Dir1/Dir2/Dir3
  • --yamlOutputPath 生成的yaml文件放置的目录,缺省为 manifest/config/codegen_conf
  • --separatePackage 是否为每一个表都生成单独的业务文件夹,缺省为 false
  • --author 业务作者
  • --overwrite 下一次生成是否无条件覆盖上次的结果,缺省为 true
  • --showDetail 是否生成查看详情前端功能,缺省为 true
  • --isRpc 是否生成 DubboGo 方式的 rpc 服务,service为服务提供者(provider),api为服务消费者(consumer),缺省为 false

示例

dbimport \
  --dblink="mysql:user:password@tcp(127.0.0.1:3306)/db_name?charset=utf8mb4&parseTime=true&loc=Local" \
  --tables=your_table1,your_table2 \
  --removeTablePrefix=your_ \
  --backendPackage=app/your_package \
  --frontendModule=app/your_package \
  --author=your_name
2). 编辑配置文件
3). 生成代码

在项目根路径下执行 codegen,根据yaml配置文件生成代码

命令行参数:

  • --tables 指定生成哪些表名的 yaml 文件,多个表名用半角逗号分隔
  • --tablePrefixOnly 只需要哪些前缀的表,多个前缀用半角逗号分隔
  • --yamlInputPath yaml配置文件所在路径
  • --frontendPath 前端项目在本地硬盘上的根目录
  • --frontendType 前端类型,无需指定(目前只支持 arco-design react 前端模板)

示例

codegen \
  --serviceOnly=true \
  --tables=your_table1,your_table2

2. yaml配置文件定义

{tableName}.yaml 配置文件的定义文档待完善

3. 生成代码目录结构(separatePackage=true)

假定:table有两个,表名分别为 data_bookdata_book_store,且设定了去掉表前缀 data_

1). 后端 (Golang) 目录结构

假定:后端 backendPackageapp/demo/bookstore

/app
└── /demo
    └── bookstore
        ├── book
        │   ├── api                     // package api
        │   │   └── book.go             // api(即controller),处理http请求和返回
        │   ├── model                   // package model
        │   │   ├── entity              // package entity
        │   │   │   └── book.go         // 实体数据模型 struct 定义
        │   │   └── book.go             // 各类输入和输出数据结构 struct 定义
        │   ├── router                  // package router
        │   │   └── book.go             // web请求路由定义
        │   └── service                 // package service
        │       ├── internal            // package internal
        │       │   ├── dao             // package dao
        │       │   │   ├── internal    // package internal
        │       │   │   │   └── book.go // dao 数据访问定义
        │       │   │   └── book.go     // 对 service 暴露 dao 数据访问定义
        │       │   └── do              // package do
        │       │       └── book.go     // 领域对象,用于dao数据操作中业务模型与实例模型转换
        │       └── book.go             // 业务逻辑封装
        └── book_store
            ├── api                
            │   └── book_store.go
            ├── model
            │   ├── entity         
            │   │   └── book_store.go    
            │   └── book_store.go        
            ├── router             
            │   └── book_store.go        
            └── service            
                ├── internal            
                │   ├── dao             
                │   │   ├── internal    
                │   │   │   └── book_store.go 
                │   │   └── book_store.go     
                │   └── do              
                │       └── book_store.go     
                └── book_store.go             

注册路由路径为 restful 风格,如下

GET    /demo/bookstore/book/list            // 绑定 api.Book.List 函数,返回数据列表
GET    /demo/bookstore/book/get             // 绑定 api.Book.Get 函数,返回单条数据
POST   /demo/bookstore/book/add             // 绑定 api.Book.Add 函数,处理新增插入
PUT    /demo/bookstore/book/edit            // 绑定 api.Book.Edit 函数,处理编辑更新
DELETE /demo/bookstore/book/delete          // 绑定 api.Book.Delete 函数,处理单条及多条数据删除
PUT    /demo/bookstore/book/changeXXX       // 如果结果表格支持inline编辑并更新特定字段

GET    /demo/bookstore/book-store/list      // 绑定 api.BookStore.List 函数,返回数据列表
GET    /demo/bookstore/book-store/get       // 绑定 api.BookStore.Get 函数,返回单条数据
POST   /demo/bookstore/book-store/add       // 绑定 api.BookStore.Add 函数,处理新增插入
PUT    /demo/bookstore/book-store/edit      // 绑定 api.BookStore.Edit 函数,处理编辑更新
DELETE /demo/bookstore/book-store/delete    // 绑定 api.BookStore.Delete 函数,处理单条及多条数据删除
PUT    /demo/bookstore/book-store/changeXXX // 如果结果表格支持inline编辑并更新特定字段
2). 前端 (Vue.js) 目录结构

假定前端模块 frontendModuledemo/bookstore

/src
├── /api
│   └── demo
│       └── bookstore
│           ├── book.js           // 处理到后端 api http请求的函数
│           └── book-store.js     // 处理到后端 api http请求的函数
└── views
    └── demo
        └── bookstore
            ├── book
            │   └── list
            │       └── index.vue // Vue组件 - CRUD 界面
            └── book-store
                └── list
                    └── index.vue // Vue组件 - CRUD 界面

组件访问路径分别为

demo/bookstore/book/list
demo/bookstore/book-store/list

4. 命名规范

Directories

Path Synopsis
codegen module
dbimport module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL