能,但必须分两步:先建表再生成;bee generate scaffold 不查数据库也不建表,仅根据字段定义生成 MVC 代码,适合从零设计;bee generate appcode 才读表结构反向生成,但默认字段全映射为 string,需加注释指定类型。

能,但必须分两步:先建表再生成,不能反着来;且 bee generate scaffold 不会自动建表,bee generate appcode 才会读表结构反向生成代码。
用 bee generate scaffold 生成 CRUD 代码(需手动建表)
这个命令只根据你给的字段定义生成 model/controller/router/view,**不查数据库,也不建表**。适合从零开始、先设计字段再落地的场景。
-
bee generate scaffold user -fields="id:int64,name:string,age:int,created_at:time":生成完整 MVC 结构 + 路由 + 模板 - 生成的
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/里补Up的 DDL,然后用bee migrate执行
用 bee generate appcode 反向生成(推荐用于已有表)
这才是真正“读库生成 CRUD”的方式。它连接 MySQL,读取 INFORMATION_SCHEMA,按实际字段类型映射成 Go struct,并自动注册路由——但要注意它的默认行为有坑。
bee generate appcode -tables="user,order" -driver=mysql -conn="root:pass@tcp(127.0.0.1:3306)/myapp"- 会生成
models/User.go、controllers/UserController.go、routers/router.go三类文件 - ⚠️ 它默认把所有字段都映射为
string类型(比如 MySQL 的INT、DATETIME全变成string),除非你在表里加了注释如/*auto_gen:type=int64*/,否则 ORM 查询时类型不匹配会静默失败或报cannot scan into dest - 它修改的
routers/router.go是直接覆盖写入,不是追加。如果你之前手写过其他路由,会被清空——建议生成后立刻 git diff,手动合并
bee api 一次性创建项目 + 全表 CRUD(适合新项目起步)
这是最省事的起点命令,本质是 bee new + bee generate appcode 的组合封装,但更激进:它会基于整个库自动生成全部表的 API。
-
bee api myapi -conn="root:pass@tcp(127.0.0.1:3306)/myapp":创建项目并读取myapp下所有表,生成完整 CRUD - 生成的 controller 方法名是
GetOne()、GetAll()、Post()、Put()、Delete(),对应 RESTful HTTP 动词 - 默认不启用 Swagger 文档,要加
-gendoc=true -downdoc=true参数启动:bee run -gendoc=true -downdoc=true,否则/swagger/404 - 注意:如果数据库里有视图、系统表(如
information_schema相关),bee api会尝试解析它们,可能报错退出。建议-tables显式限定,例如bee api myapi -tables="user,post,comment"
真正麻烦的从来不是生成代码,而是生成后的适配:字段类型映射不准、时间字段时区错乱、外键没生成关联 struct、router.go 被覆盖丢路由……这些地方没日志、不报错,只在运行时数据读不出来才暴露问题。


















