美文网首页
一行命令将mysql表转为golang struct

一行命令将mysql表转为golang struct

作者: 丨Andy丨丶 | 来源:发表于2019-12-18 22:34 被阅读0次

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

    准备工作

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

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

    相关文章

      网友评论

          本文标题:一行命令将mysql表转为golang struct

          本文链接:https://www.haomeiwen.com/subject/mojpnctx.html