头图

简介

codegen https://github.com/xyzbit/codegen 是一个专注于提高开发效率的代码生成工具集合。
目前主要包含了数据库访问层(Repository)代码生成功能,未来可能会扩展更多功能模块如: API 接口代码生成,API错误码生成,API SDK 生成。

核心功能:数据库仓储层代码生成(dbrepo)

在传统 Web 开发中,我们常常陷入以下重复劳动:

  • 模型层代码手工编写:每张数据库表都需要手动创建对应的结构体/类,字段类型需要与数据库列类型精确匹配
  • SQL 语句硬编码:即使使用 ORM 工具,复杂查询仍需手写 SQL,容易产生字符串拼接错误
  • Repo 层每个实体代码重复度极高:每个实体都需要实现基础的 Insert/Update/Delete 方法,代码重复率高达 70%
  • Repo 层没有统一标准,难以维护:Repo的代码没有标准,导致很多代码重复编写、无法复用

codegendbrepo 模块是该工具集中的一个重要组件,它能够根据数据库表结构自动生成完整的仓储层代码。这个功能对于遵循领域驱动设计(DDD)架构的项目特别有用。

效果如下:
生成的 实体、仓储层接口、仓储层实现、以及仓储层mock实现

主要特点

  • 完整的代码生成
  • 生成实体定义(Entity)
  • 生成仓储接口(Repository Interface)
  • 生成接口实现(Repository Implementation)
  • Mock 接口实现支持(SQLite 模拟数据、Docker 容器化测试环境)
  • 灵活的配置方式
  • 支持 YAML 配置文件
  • 支持命令行参数
  • 支持混合配置模式

快速体验

  1. 工具安装
go install github.com/xyzbit/codegen@latest
  1. 进入 example 目录
cd sqlgen/example
  1. 生成 repo 层代码: xx_adpter.go(接口实现)、xx_repo.go(接口定义)、xx_entity(实体)
  2. 使用配置文件
codegen dbrepo gorm -c sqlgen.yaml
详细用法参考项目README.md
https://github.com/xyzbit/codegen

代码使用示例

生成的代码完全兼容 GORM,并提供了简洁的查询接口。以下是一些常见使用场景:

func Example() {
    ctx := context.Background()
    // 初始化一个 mock repo 用于测试.
    userRepo, _ := data.NewSQLiteMockUserRepo()

    err := userRepo.Create(ctx,
        &entity.User{
            NickName: "lee",
            Uid:      1,
        }, &entity.User{
            NickName: "lee",
            Uid:      2,
        },
    )
    if err != nil {
        fmt.Printf("create user error: %v", err)
        return
    }

    // 列表查询
    users, err := userRepo.List(ctx, gormx.NewQuery().Eq(entity.UserNickName, "lee"))
    if err != nil {
        fmt.Printf("List user error: %v", err)
        return
    }
    fmt.Printf("List user: len(%d)\n", len(users))

    // 事务处理
    err = gormx.Transaction(ctx, userRepo, func(txCtx context.Context) error {
        // 创建用户
        err := userRepo.Create(txCtx, &entity.User{
            NickName: "test",
            Uid:      3,
        })
        if err != nil {
            return err
        }

        // 记录日志
        err = userRepo.Delete(txCtx, 1)
        if err != nil {
            return err
        }

        return nil
    })
    if err != nil {
        fmt.Printf("Transaction error: %v", err)
        return
    }

    fmt.Printf("Transaction success\n")
    // Output:
    // List user: len(2)
    // Transaction success
}

工具优势

  • 提高开发效率:自动生成样板代码,减少重复工作
  • 代码一致性:确保仓储层代码风格统一
  • 易于测试:内置 Mock 支持,方便单元测试
  • 灵活配置:支持多种配置方式,适应不同项目需求

未来展望

目前该工具集主要专注于数据库访问层代码生成,未来可能会扩展更多功能,如:

  • 错误码生成
  • API 接口代码生成
  • API SDK 生成
🌟 更多精彩内容,欢迎关注我的公众号 [二进制茶馆],我们一起交流学习

litao-2071
6 声望0 粉丝