golang mysql 自动建表_一行命令将mysql表转为golang struct

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

}

)

准备工作

根据自己的操作系统平台下载不同的二进制文件

或者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给一下你的小星星作为我前进的动力。

你可能感兴趣的:(golang,mysql,自动建表)