gf gen dao 代码生成:流程、产物与扩展

结论:gf gen dao 把“表结构”翻译成 Go 代码:按配置连接数据库,为每张表生成 entity(表结构体)、do(链式传参结构)、dao 与 dao/internal(数据访问封装,含字段常量),保证字段引用可编译期发现;产物集中在 internal/model 与 internal/dao,改表后重新生成,日常不手改。

一、流程

  1. 配置:hack/config.yaml 中配置 database 连接(link)、生成范围(tables/表前缀过滤)与输出目录(默认 internal/model、internal/dao)。
  2. 执行:项目根目录运行 gf gen dao(可用 -t 限定表、-h 查看参数,以官方文档为准)。
  3. 验证:生成后可编译检查,字段引用使用 Columns 常量保证重构安全。

二、产物一览

产物位置说明
entityinternal/model/entity表结构体:字段与 orm/json 标签一一对应
dointernal/model/do面向链式 Where/写入传参的结构
daointernal/dao + dao/internalCtx 入口、链式方法封装与字段常量
Columnsdao 内部字段名常量,如 dao.User.Columns().Name

代码示例

// entity:internal/model/entity/user.go(示意)
type User struct {
    g.Meta `orm:"table:user"`
    Id     int64  `json:"id"   orm:"id"`
    Name   string `json:"name" orm:"name"`
    Age    int    `json:"age"  orm:"age"`
}

// 使用 dao:字段引用走常量,改列名可编译期发现
id, err := dao.User.Ctx(ctx).
    Where(dao.User.Columns().Name, "tom").
    Value("id")

常见追问 / 记忆点

  • 追问:表结构变了怎么办?→ 改表后重新执行 gf gen dao,生成产物增量覆盖;手改过的生成文件会被覆盖,扩展应放 logic 或自定义模板。
  • 追问:还能生成什么?→ gf gen service 可根据 dao/logic 反向生成 service 接口与实现骨架;模板可定制(以官方文档为准)。
  • 记忆点:entity 照表、do 传参、dao 封装、Columns 常量——“表变就重跑,产物不手改”。
笔记加载中…