# beego 代码生成工具体验
## 设计 MySQL 数据库
1. 通过 MySQL Workbench EER Digram 设计表和关系
![image.png](https://static.studygolang.com/200626/7a33780bbf688321021bc24c6dafdb66.png)
2. 设置 MySQL Workbench 默认目标版本和 MySQL 服务器版本一致
![image.png](https://static.studygolang.com/200626/c8bdc9157ef101c9d3bdaec663ee22ba.png)
3. 同步模型到数据库
![image.png](https://static.studygolang.com/200626/d6e27a7702c252fea38ed2b942ddbfe5.png)
```
-- MySQL Workbench Synchronization
-- Generated: 2020-06-26 12:07
-- Model: New Model
-- Version: 1.0
-- Project: Name of the project
-- Author: medea
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
CREATE TABLE IF NOT EXISTS `dotblog`.`users` (
`id` INT(11) NOT NULL COMMENT '用户ID',
`name` VARCHAR(255) NOT NULL COMMENT '用户名称',
`password` VARCHAR(255) NOT NULL COMMENT '用户密码',
`email` VARCHAR(255) NOT NULL COMMENT '用户邮箱',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户创建时间',
`avatar` MEDIUMTEXT NULL DEFAULT NULL COMMENT '用户头像',
PRIMARY KEY (`id`),
UNIQUE INDEX `username_UNIQUE` (`name` ASC),
UNIQUE INDEX `email_UNIQUE` (`email` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`articles` (
`id` INT(11) NOT NULL COMMENT '文章ID',
`title` VARCHAR(255) NULL DEFAULT NULL COMMENT '文章标题',
`users_id` INT(11) NOT NULL COMMENT '文章用户',
`content` TEXT(65535) NOT NULL COMMENT '文章内容',
`create_time` TIMESTAMP NOT NULL COMMENT '文章创建时间',
PRIMARY KEY (`id`),
INDEX `fk_articles_users_idx` (`users_id` ASC),
CONSTRAINT `fk_articles_users`
FOREIGN KEY (`users_id`)
REFERENCES `dotblog`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`tags` (
`id` INT(11) NOT NULL COMMENT '标签ID',
`tag` VARCHAR(255) NOT NULL COMMENT '标签值',
PRIMARY KEY (`id`),
UNIQUE INDEX `tag_UNIQUE` (`tag` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`categories` (
`id` INT(11) NOT NULL COMMENT '类型ID',
`category` VARCHAR(255) NOT NULL COMMENT '类型值',
PRIMARY KEY (`id`),
UNIQUE INDEX `category_UNIQUE` (`category` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`article_comments` (
`id` INT(11) NOT NULL COMMENT '评论ID',
`users_id` INT(11) NOT NULL COMMENT '评论用户',
`articles_id` INT(11) NOT NULL COMMENT '评论文章',
`comment` TEXT(65535) NOT NULL COMMENT '评论内容',
`create_time` TIMESTAMP NOT NULL COMMENT '评论创建时间',
PRIMARY KEY (`id`),
INDEX `fk_comments_users1_idx` (`users_id` ASC),
INDEX `fk_comments_articles1_idx` (`articles_id` ASC),
CONSTRAINT `fk_comments_users1`
FOREIGN KEY (`users_id`)
REFERENCES `dotblog`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_comments_articles1`
FOREIGN KEY (`articles_id`)
REFERENCES `dotblog`.`articles` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`article_tags` (
`id` INT(11) NOT NULL COMMENT '文章标签ID',
`articles_id` INT(11) NOT NULL COMMENT '文章ID',
`tags_id` INT(11) NOT NULL COMMENT '标签ID',
PRIMARY KEY (`id`),
INDEX `fk_article_tags_articles1_idx` (`articles_id` ASC),
INDEX `fk_article_tags_tags1_idx` (`tags_id` ASC),
CONSTRAINT `fk_article_tags_articles1`
FOREIGN KEY (`articles_id`)
REFERENCES `dotblog`.`articles` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_article_tags_tags1`
FOREIGN KEY (`tags_id`)
REFERENCES `dotblog`.`tags` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `dotblog`.`article_categories` (
`id` INT(11) NOT NULL COMMENT '文章类型ID',
`articles_id` INT(11) NOT NULL COMMENT '文章ID',
`categories_id` INT(11) NOT NULL COMMENT '类型ID',
INDEX `fk_article_categories_articles1_idx` (`articles_id` ASC),
INDEX `fk_article_categories_categories1_idx` (`categories_id` ASC),
PRIMARY KEY (`id`),
CONSTRAINT `fk_article_categories_articles1`
FOREIGN KEY (`articles_id`)
REFERENCES `dotblog`.`articles` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_article_categories_categories1`
FOREIGN KEY (`categories_id`)
REFERENCES `dotblog`.`categories` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
```
## bee api 命令生成项目
1. 执行 `bee api dotblog` 命令生成项目
2. 执行 `go mod init` 生成 go.mod
```
.
├── conf
│ └── app.conf
├── controllers
│ ├── object.go
│ └── user.go
├── go.mod
├── main.go
├── models
│ ├── object.go
│ └── user.go
├── routers
│ └── router.go
└── tests
└── default_test.go
```
3. 执行 `bee generate appcode -driver=mysql -conn="user:pwd@tcp(127.0.0.1:3306)/dotblog" -level=3` 基于数据库生成 models、controllers、routers 代码文件
```
.
├── conf
│ └── app.conf
├── controllers
│ ├── article_categories.go
│ ├── article_comments.go
│ ├── article_tags.go
│ ├── articles.go
│ ├── categories.go
│ ├── object.go
│ ├── tags.go
│ ├── user.go
│ └── users.go
├── go.mod
├── main.go
├── models
│ ├── article_categories.go
│ ├── article_comments.go
│ ├── article_tags.go
│ ├── articles.go
│ ├── categories.go
│ ├── object.go
│ ├── tags.go
│ ├── user.go
│ └── users.go
├── routers
│ └── router.go
└── tests
└── default_test.go
```
4. 执行 `bee generate docs` 生成 swagger 接口文档
```
.
...
├── swagger
│ ├── swagger.json
│ └── swagger.yml
...
```
5. main.go 文件中加入如下代码
```
import (
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func main() {
orm.RegisterDataBase("default", "mysql", "user:pwd@tcp(127.0.0.1:3306)/dotblog?charset=utf8")
}
```
6. 执行 `bee run -gendoc=true -downdoc=true` 启动服务和文档
访问 "http://127.0.0.1:8080/v1/articles" 访问接口
访问 "http://127.0.0.1:8080/swagger" 查看接口文档
![image.png](https://static.studygolang.com/200626/c0cd9298c6db4de70729bc88b0369272.png)
有疑问加站长微信联系(非本文作者))