Github地址
中文文档| English
okcli 可以将指定数据表生成为对应的model文件,目前支持将列名、数据类型、默认值、注释带入指定model中,
就像如下文件:
import "time"
type (
Student struct {
Id int32 `db:"id"`
Name string `db:"name"` // the student's name
Gender int8 `db:"gender"` // the student's gender,0-male,1-female,DEFAULT:0
Age int8 `db:"age"` // the student's age,DEFAULT:0
Class string `db:"class"` // the student's class
CreateTime time.Time `db:"create_time"` // the column create time,DEFAULT:CURRENT_TIMESTAMP
UpdateTime time.Time `db:"update_time"` // the column last update time,DEFAULT:CURRENT_TIMESTAMP
}
)
准备工作
根据自己的操作系统平台下载不同的二进制文件
- windows: okcli_windows
- mac OS: okcli_drawin
- linux: okcli_linux
或者clone源码进行编译。
其次,将下载或编译后的二进制文件设置到环境变量中,以mac OS为例子:
假设二进制文件okcli存放在/usr/local/okcli文件目录下
$ sudo vi ~/.bash_profile
在文件末尾添加:
$ export OKCLI=/usr/local/okcli
$ export PATH=$PATH:$OKCLI
最后执行以下source ~/.bash_profile
使用说明
数据库准备
这里以本地数据库举例,在demo库下新建student、course、student_score表,sql如下:
CREATE TABLE `student` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'the student''s name',
`gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'the student''s gender,0-male,1-female',
`age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'the student''s age',
`class` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'the student''s class',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'the column create time',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'the column last update time',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Student info';
CREATE TABLE `course` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'course name',
`teacher` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'teach person',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `student_score` (
`id` int(20) NOT NULL,
`student_id` int(20) NOT NULL DEFAULT '0',
`course_id` int(20) NOT NULL DEFAULT '0',
`score` tinyint(3) unsigned NOT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `student_course_unique` (`student_id`,`course_id`),
KEY `course_idx` (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
okcli命令准备
命令行参数
$ okcli
NAME:
okcli - a cli tool to generate model
USAGE:
okcli [global options] command [command options] [arguments...]
VERSION:
0.0.1
COMMANDS:
init generate the json configuration template
gen generated from a configuration file
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
生成model
1、配置文件生成
$ okcli init
执行命令后将会在当前目录生成一个config.json文件,内容模板如下:
// TODO: FILLED IN YOUR REAL VALUE AND DELETE THIS LINE
{
"username": "root",
"password": "123456",
"host": "localhost:3306",
"database":{
"name":"demo",
"tables":["student","course","student_score"]
},
"tagPrefix":"db"
}
- username:
数据库连接名 - password:
数据库连接密码 - host:
数据库连接地址 - database:
数据库名称和数据表名列表 - tagPrefix:
待格式化model中tag的前缀,默认为"db"
将config.json配置文件修改为你需要连接的数据库地址,填入待生成model的数据库名和表名。
2、执行okcli gen 命令
$ okcli gen -c ./config.json -o ./model
successful,the path: /Users/anqiansong/go/src/okgo/model/student.go
successful,the path: /Users/anqiansong/go/src/okgo/model/course.go
successful,the path: /Users/anqiansong/go/src/okgo/model/studentscore.go
- c 指定配置文件路径
- o 指定model文件存放目录,默认为当前目录
执行以上命令将按照配置文件生成对应model文件,并存放在model文件夹中,如果指定model文件已经存在,则会提示你
WARNING:the file [student.go] would be override,Y/N?
3、生成model文件
- Student
package model
import "time"
type (
Student struct {
Id int32 `gorm:"id"`
Name string `gorm:"name"` // the student's name
Gender int8 `gorm:"gender"` // the student's gender,0-male,1-female,DEFAULT:0
Age int8 `gorm:"age"` // the student's age,DEFAULT:0
Class string `gorm:"class"` // the student's class
CreateTime time.Time `gorm:"create_time"` // the column create time,DEFAULT:CURRENT_TIMESTAMP
UpdateTime time.Time `gorm:"update_time"` // the column last update time,DEFAULT:CURRENT_TIMESTAMP
}
)
- Course
package model
import "time"
type (
Course struct {
Id int32 `gorm:"id"`
Name string `gorm:"name"` // course name
Teacher string `gorm:"teacher"` // teach person
CreateTime time.Time `gorm:"create_time"`
UpdateTime time.Time `gorm:"update_time"`
}
)
- StudentScore
package model
import "time"
type (
StudentScore struct {
Id int32 `gorm:"id"`
StudentId int32 `gorm:"student_id"`
CourseId int32 `gorm:"course_id"`
Score int8 `gorm:"score"`
CreateTime time.Time `gorm:"create_time"`
UpdateTime time.Time `gorm:"update_time"`
}
)
注意事项
model文件生成后目前可支持代码格式化,但是暂不支持包的自动引入,因此,在生成文件后你需要对model文件的
包进行检查导入。
结尾
如有对你有帮助,请帮忙点击一下在github给一下你的小星星作为我前进的动力。
有疑问加站长微信联系(非本文作者)