用 CodeGen 告别重复开发:自动化生成数据库访问层代码

简介

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(实体)
  • 使用配置文件
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 生成

🌟 更多精彩内容,欢迎关注我的公众号 [二进制茶馆],我们一起交流学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值