程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

使用 GORM 自动生成 Golang 代码

balukai 2025-03-10 12:28:07 文章精选 161 ℃


一键根据数据库表结构生成对应的 Golang 模型代码,提升开发效率!在 Go 语言中,gorm 是一个流行的 ORM 库,而 gen 是 gorm 的一个代码生成工具,用于根据数据库表结构生成 Go 模型和 DAO 层代码。gen.NewGenerator 是 gen 的核心函数,用于初始化生成器并配置生成规则。

以下是 gen.NewGenerator 的详细使用教程,包含代码示例和说明。


1. 安装 gorm/gen

首先,确保安装了 gorm 和 gen:

go get -u gorm.io/gorm
go get -u gorm.io/gen

2. 使用 gen.NewGenerator

gen.NewGenerator 用于创建一个代码生成器实例,并配置生成规则。

2.1 初始化生成器

g := gen.NewGenerator(gen.Config{
    OutPath:      "./dao", // 生成的 DAO 代码输出路径
    ModelPkgPath: "./model", // 生成的模型代码输出路径
    Mode:        gen.WithDefaultQuery | gen.WithQueryInterface, // 生成模式
})

2.2 配置数据库连接

使用 g.UseDB() 配置数据库连接。

import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

func main() {
    // 连接数据库
    dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    // 初始化生成器
    g := gen.NewGenerator(gen.Config{
        OutPath:      "./dao",
        ModelPkgPath: "./model",
    })

    // 配置数据库连接
    g.UseDB(db)
}

3. 生成代码

3.1 生成全部表的模型和 DAO

g.ApplyBasic(g.GenerateAllTable()...)

3.2 生成指定表的模型和 DAO

g.ApplyBasic(
    g.GenerateModel("users"),  // 生成 users 表的模型
    g.GenerateModel("orders"), // 生成 orders 表的模型
)

3.3 生成查询接口

g.ApplyInterface(func(UserQuerier) {}, model.User{}) // 为 User 模型生成查询接口

4. 完整示例

以下是一个完整的示例,展示如何使用 gen.NewGenerator 生成代码。

package main

import (
    "gorm.io/driver/mysql"
    "gorm.io/gen"
    "gorm.io/gorm"
)

func main() {
    // 连接数据库
    dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    // 初始化生成器
    g := gen.NewGenerator(gen.Config{
        OutPath:      "./dao",      // DAO 代码输出路径
        ModelPkgPath: "./model",    // 模型代码输出路径
        Mode:        gen.WithDefaultQuery | gen.WithQueryInterface, // 生成模式
    })

    // 配置数据库连接
    g.UseDB(db)

    // 生成全部表的模型和 DAO
    g.ApplyBasic(g.GenerateAllTable()...)

    // 生成指定表的模型和 DAO
    g.ApplyBasic(
        g.GenerateModel("users"),
        g.GenerateModel("orders"),
    )

    // 生成查询接口
    g.ApplyInterface(func(UserQuerier) {}, model.User{})

    // 执行代码生成
    g.Execute()
}

5. 生成文件结构

运行上述代码后,会生成以下文件结构:

.
├── dao
│   ├── user_dao.go
│   ├── order_dao.go
│   └── query.go
└── model
    ├── user.go
    └── order.go

6. 生成的代码示例

6.1 模型文件(model/user.go)

package model

type User struct {
    ID   int64  `gorm:"column:id"`
    Name string `gorm:"column:name"`
}

6.2 DAO 文件(dao/user_dao.go)

package dao

import (
    "gorm.io/gorm"
    "./model"
)

type UserDao struct {
    db *gorm.DB
}

func NewUserDao(db *gorm.DB) *UserDao {
    return &UserDao{db: db}
}

func (d *UserDao) Create(user *model.User) error {
    return d.db.Create(user).Error
}

6.3 查询接口(query.go)

package dao

type UserQuerier interface {
    Create(user *model.User) error
}

7 .使用命令一键生成

使用 gorm-gen 工具根据表结构自动生成 Golang 模型代码:

gorm-gen -dsn "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" \  
         -tables "table1,table2" \  
         -out "./models"

参数说明

  • -dsn:数据库连接字符串。
  • -tables:指定要生成代码的表,多个表用逗号分隔。
  • -out:生成代码的输出目录。

总结

  • gen.NewGenerator 是 gorm/gen 的核心函数,用于初始化代码生成器。
  • 通过 g.UseDB() 配置数据库连接,g.ApplyBasic() 生成模型和 DAO。
  • 生成的代码包括模型文件、DAO 文件和查询接口,方便进行数据库操作。

Tags:

最近发表
标签列表