网站首页 > 文章精选 正文
一键根据数据库表结构生成对应的 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 文件和查询接口,方便进行数据库操作。
- 上一篇: golang性能优化实践
- 下一篇: Golang 如何使用JWT
猜你喜欢
- 2025-03-10 seata-golang 接入指南
- 2025-03-10 Golang 入门系列(十三)介绍一个非常强大的web框架-Beego
- 2025-03-10 Golang实现gRPC的Proxy的原理
- 2025-03-10 Go语言学习(8) 第一个GO语言的GUI图形窗体
- 2025-03-10 Golang 如何使用JWT
- 2025-03-10 golang性能优化实践
- 2025-03-10 超干货:Golang 简洁架构实战
- 2025-03-10 《Golang入门》一篇文章学完GO的基本语法《建议收藏》
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)