一行命令实现mysql转go struct
2015 年 5 月 29 日
Githubd地址
中文文档
| DOCUMENT
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.exe
- mac OS: okcli_darwin
- 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给一下你的小星星作为我前进的动力。