26

一行命令实现mysql转go struct

 4 years ago
source link: https://studygolang.com/articles/25361
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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
    }
)

准备工作

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK