Skip to content

Repository files navigation

功能

  1. 根据sql语句快速生成protobuf、api文件
  2. 根据表字段约束自动设置api文件tag的default、optional
  3. 会生成自己定义model, 目前基于gorm生成model层, 支持缓存
  4. 生成api层的crud, rpc层
  5. 生成的代码文件会根据表分目录

使用

安装

go install github.com/maolinc/gencode@latest

运行

gencode -f="genConfig.json"

-f 指定配置文件路径, 不指定, 则在当前文件下找genConfig.json文件, -t=init重置模板

升级

go clean -i github.com/maolinc/gencode
go install github.com/maolinc/gencode@latest
重新install后, 执行gencode时需带上-t=init参数才会使用最新的模板

genConfig.json字段详解

查看

genConfig.json最简配置

只需配置数据库,默认会生成api文件,proto文件,model层(基于gorm) (Switch默认全为为A)

{
"DBConfig": {
"DbType": "mysql",
"DBName": "koala",
"Host": "127.0.0.1",
"Port": 3306,
"User": "root",
"Password": "123456"
}
}

去注释全配置

查看

注意

  • 生成crud之后需要手动在config里面添加连接配置, 如下
  • 在svc目录的serviceContext中追加依赖, 手动复制合并
  • 只会对有主键的表生成crud操作
typeConfigstruct {
rest.RestConfDBstruct {
DataSourcestring
}
Cache cache.CacheConf
}
  • 对于model需要额为添加信息可支持逻辑删除、创建更新时间, 如下:具体查看gorm规则
DeleteFlag soft_delete.DeletedAt`gorm:"column:delete_flag;softDelete:flag"`// 删除标志(0代表存在 1代表删除)CreateTime*time.Time`gorm:"column:create_time;autoCreateTime"`// 创建时间UpdateTime*time.Time`gorm:"column:update_time;autoUpdateTime"`// 更新时间

IgnoreFieldValue

IgnoreFieldValue: 类型字典{K:V}结构,K-string,V-int, 可以灵活控制字段在创建、更新、查询时是否显示
K对应字段, V对应字段值
默认值:{"create_time": 3, "create_at": 3, "create_by": 3, "update_time": 3, "update_at": 3, "update_by": 3,
"delete_flag": 7, "del_flag": 7, "del_state": 7, "delete_time": 7, "del_time": 7, "delete_at": 7,}
V显示规则: 1(create), 2(update),4(select),8(delete), 1+2=3(create,update)
1+2+4=7(create,select,update)
根据1、2、4、8进行组合就行
举个例子: 对于sys_user表, 结构看下面的sql
如果不想delete_flag字段在创建、查询、更新的结构体存在, 可写 {"delete_flag":7}
如果不想create_time和update_time字段在创建、更新的结构体存在, 可写 {"create_time":3, "update_time":3}
如果不想password字段在查询的结构体存在, 可写 {"password":4}
这么做的原因是借助二进制进行控制
// false->ignore true->show eg:2 & 7 = 010 & 111 = 010= 2==0=false ignore
`id`bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`password`varchar(100) DEFAULT '' COMMENT '密码',
`delete_flag`int(11) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`login_ip`varchar(128) DEFAULT '' COMMENT '最后登录IP',
`login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_by`varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by`varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`salt`varchar(128) NOT NULL COMMENT '加密盐',

genConfig配置详解

{"DBConfig": {//数据库配置"DbType": "mysql",//数据库类型"DBName": "koala",//数据库名字"Host": "127.0.0.1",//数据库地址"Port": 3306,//数据库端口"User": "root",//数据库用户名"Password": "123456"//数据库密码},"GlobalConfig": {//全局配置"FieldStyle": "",//字段风格,可选:mLc | m_lc,默认:mLc 效果mLc:`json:createTime` m_lc:`json:create_time`"ServiceName": "",//服务名称,默认为数据库名字, 影响proto、api文件名字"Tables": [],//可指定代生成的表, 默认全部表 eg:["sys_role", "sys_user"]"IgnoreTables": [],//需要忽略的表 eg:["sys_post"]"IgnoreFields": [],//忽略字段 eg:["delete_flag", "update_time"]"IgnoreMap": {}//可指定某表中忽略某些字段, eg:{"sys_role":["delete_flag","create_time"], "sys_user":["password"]}},"ApiConfig": {//api文件生成配置, 替换GlobalConfig中重复字段"Switch": "A",//开关选择, A:只生成api文件, B:生成api层的crud,会自动先执行goctl api, 非AB则不会生成api文件"GoZeroStyle": "",//指定goctl命令中的style"DateStyle": "",//控制日期类型格式, 可选:string、number, 默认number对于的日期格式为int64"ServiceName": "",//服务名字, 默认为GlobalConfig中ServiceName"Syntax": "",//api文件的syntax"Prefix": "",//api文件的接口前缀, 默认数据库名称"Author": "",//api文件的author"Email": "",//api文件的email"Version": "",//api文件的version"OutPath": "",//指定api文件生成输出路径, 默认会在当前路径生成api文件夹"IgnoreFieldValue": {}//控制字段在创建、更新、查询时是否显示, 具体规则见下面},"ProtoConfig":{//proto文件生成配置, 替换GlobalConfig中重复字段"Switch": "A",//开关选择, A:只生成proto文件, B:生成rpc层的crud,会自动先执行goctl rpc, 非AB则不会生成任何文件"GoZeroStyle": "",//指定goctl命令中的style"DateStyle": "",//控制日期类型格式, 可选:string、number, 默认number对于的日期格式为int64"ServiceName": "",//服务名字, 默认为GlobalConfig中ServiceName"Syntax": "",//proto文件的syntax"GoPackage": "",//proto文件的go_package"Package": "",//proto文件的package"OutPath": "",//指定proto文件生成输出路径, 默认会在当前路径生成rpc文件夹"IgnoreFieldValue": {}//控制字段在创建、更新、查询时是否显示, 具体规则见下面},"ModelConfig": {"Switch": "A","OutPath": "","Tables": [],"IsCache": false//生成crud逻辑是否带缓存}}

去注释全配置

{
"DBConfig": {
"DbType": "mysql",
"DBName": "koala",
"Host": "127.0.0.1",
"Port": 3306,
"User": "root",
"Password": "123456"
},
"GlobalConfig": {
"FieldStyle": "",
"ServiceName": "",
"Tables": [],
"IgnoreTables": [],
"IgnoreFields": [],
"IgnoreMap": {}
},
"ApiConfig": {
"Switch": "A",
"ServiceName": "",
"GoZeroStyle": "",
"DateStyle": "",
"Syntax": "",
"Prefix": "",
"Author": "",
"Email": "",
"Version": "",
"OutPath": "",
"IgnoreFieldValue": {}
},
"ProtoConfig": {
"Switch": "A",
"ServiceName": "",
"GoZeroStyle": "",
"DateStyle": "",
"Syntax": "",
"GoPackage": "",
"Package": "",
"OutPath": "",
"IgnoreFieldValue": {}
},
"ModelConfig": {
"Switch": "A",
"OutPath": "",
"Tables": [],
"IsCache": false }
}

效果图

  • model

1685533140800

  • api、proto略

About

Quickly generate files such as protobuf, api, model, and crud based on SQL statements

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages