能,但必须分两步:先确保数据库表存在,再用 bee generate appcode 生成代码;直接跑 bee generate scaffold 不会建表,也不读库,后续 orm 操作必 panic。

能,但必须分两步:先确保数据库表存在,再用 bee generate appcode 生成代码;直接跑 bee generate scaffold 不会建表,也不读库,后续 ORM 操作必 panic。
用 bee generate appcode 反向生成(已有表时首选)
这是最贴近“快速实现 CRUD”的路径,它真正连接数据库、读取字段类型、生成 model/controller/router 三件套。但默认行为有明显陷阱:
-
bee generate appcode把所有 MySQL 字段(比如INT、DATETIME)全映射成string,除非你在数据库字段的 COMMENT 里明确写/*auto_gen:type=int64*/或/*auto_gen:type=time.Time*/ - 它生成的
routers/router.go是覆盖写入,不是追加——如果你之前手动加过其他路由,会被清空,务必生成后立刻git diff并手动合并 - 连接字符串中的数据库名必须已存在且可连,推荐用完整格式:
root:pass@tcp(127.0.0.1:3306)/myapp?charset=utf8mb4,漏掉?charset=utf8mb4容易导致中文乱码或插入失败
用 bee generate scaffold 从零建模(适合新设计阶段)
这个命令只按你给的字段定义生成代码,完全不碰数据库。它适合你先想清楚字段,再落地的场景,但容易误以为“生成即可用”:
- 命令如
bee generate scaffold user -fields="id:int64,name:string,created_at:time"会生成models/User.go、controllers/UserController.go等,但models/User.go里的TableName()返回"user",不会执行CREATE TABLE - 如果数据库里没有
user表,调用orm.Read()或orm.Insert()会直接 panic,报错ERROR 1146 (42S02): Table 'xxx.user' doesn't exist - 想自动建表?得额外运行
bee generate migration init_user,然后手动补全migrations/xxx_init_user.go中的Up方法(写 DDL),最后执行bee migrate
用 bee api 一键启动(新项目起步最快)
它本质是 bee new + bee generate appcode 的封装,但更激进:基于整个数据库自动生成全部表的 RESTful API:
- 命令如
bee api myapi -conn="root:pass@tcp(127.0.0.1:3306)/myapp",会在当前目录创建myapi项目,并为myapp下每个表生成对应 controller 和路由 - 生成的 controller 方法是标准 REST 风格:
GetOne()、GetAll()、Post()、Put()、Delete(),参数都从 URL path 或 body 解析,无需手写绑定逻辑 - 它不会帮你初始化 ORM——你仍需在
main.go或conf/app.conf里配好数据库连接,并在models/init.go中调用orm.RegisterModel(),否则运行时报model not registered
最容易被忽略的是类型映射和 ORM 初始化这两步:哪怕 bee generate appcode 生成了 struct 字段为 int64,如果数据库字段没加 /*auto_gen:type=...*/ 注释,或者没在 models/init.go 里注册模型,运行时照样查不到数据或类型转换失败。











