Skip to main content

mysql 代码生成

MySQL 用法

概述

mysql 代码生成支持从 sql 文件和数据库链接生成, 且支持生成带缓存逻辑代码。

mysql 生成的代码内容有数据表对应的 golang 结构体、CURD 操作方法,缓存逻辑等信息,更多详细的数据库代码生成可参考指南 goctl model

任务目标

  1. 熟悉 goctl 生成 mysql 代码的命令使用,了解目前支持的指令和功能
  2. 初步了解 goctl 生成 mysql 代码的格式
  3. 初步掌握从 sql 文件编写到 mysql 代码的生成流程

准备条件

  1. 完成 golang 安装
  2. 完成 goctl 安装

代码生成

  1. 首先执行如下指令将示例 sql 文件存储到本地的 user.sql 文件中。

    CREATE TABLE user (
    id bigint AUTO_INCREMENT,
    name varchar(255) NULL COMMENT 'The username',
    password varchar(255) NOT NULL DEFAULT '' COMMENT 'The user password',
    mobile varchar(255) NOT NULL DEFAULT '' COMMENT 'The mobile phone number',
    gender char(10) NOT NULL DEFAULT 'male' COMMENT 'gender,male|female|unknown',
    nickname varchar(255) NULL DEFAULT '' COMMENT 'The nickname',
    type tinyint(1) NULL DEFAULT 0 COMMENT 'The user type, 0:normal,1:vip, for test golang keyword',
    create_at timestamp NULL,
    update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE mobile_index (mobile),
    UNIQUE name_index (name),
    PRIMARY KEY (id)
    ) ENGINE = InnoDB COLLATE utf8mb4_general_ci COMMENT 'user table';
  2. 新建工作空间和目录工程

    $ mkdir -p ~/workspace/model/mysql
  3. 将上文中存储的 user.sql 文件移动到 ~/workspace/model/mysql 目录下

  4. 生成 model 代码

    $ cd ~/workspace/model/mysql
    $ goctl model mysql ddl --src user.sql --dir .
    Done.

    当你看到 Done. 输出则代表生成成功了,接下来我们来看一下生成的代码内容:

    # 列出当前目录下的文件
    $ ls
    user.sql usermodel.go usermodel_gen.go vars.go
    # 查看目录树
    $ tree
    .
    ├── user.sql
    ├── usermodel.go
    ├── usermodel_gen.go
    └── vars.go

    0 directories, 4 files
  5. 代码查看

    CREATE TABLE user (
    id bigint AUTO_INCREMENT,
    name varchar(255) NULL COMMENT 'The username',
    password varchar(255) NOT NULL DEFAULT '' COMMENT 'The user password',
    mobile varchar(255) NOT NULL DEFAULT '' COMMENT 'The mobile phone number',
    gender char(10) NOT NULL DEFAULT 'male' COMMENT 'gender,male|female|unknown',
    nickname varchar(255) NULL DEFAULT '' COMMENT 'The nickname',
    type tinyint(1) NULL DEFAULT 0 COMMENT 'The user type, 0:normal,1:vip, for test golang keyword',
    create_at timestamp NULL,
    update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE mobile_index (mobile),
    UNIQUE name_index (name),
    PRIMARY KEY (id)
    ) ENGINE = InnoDB COLLATE utf8mb4_general_ci COMMENT 'user table';