ZBLOG

gorm 泛型实现对象增删改查操作

Gorm 是一个 Go 语言的 ORM 框架,支持多种数据库。Gorm 的使用方式非常灵活,可以通过结构体定义表和字段信息,也可以手动指定表名和字段名。

为了实现泛型操作,我们可以定义一个通用的模型结构体,并在其基础上实现增删改查等方法。

type Model struct {
    ID        uint `gorm:"primary_key"`
    CreatedAt time.Time
    UpdatedAt time.Time
}

func (m *Model) Create(db *gorm.DB) error {
    return db.Create(m).Error
}

func (m *Model) Update(db *gorm.DB) error {
    return db.Save(m).Error
}

func (m *Model) Delete(db *gorm.DB) error {
    return db.Delete(m).Error
}

func FindByID(db *gorm.DB, id uint, out interface{}) error {
    return db.First(out, id).Error
}

以上代码中,我们定义了一个基础模型 Model,包含了 ID、创建时间和更新时间等基本信息。接着,我们分别实现了 Create、Update 和 Delete 方法,在其中调用 Gorm 提供的相关方法来完成操作。最后还实现了一个根据 ID 查找记录的通用函数。

有了这些通用的方法之后,在具体使用时只需要继承 Model 结构体,并按需修改字段信息即可:

type User struct {
    Model
    Name string
}

func main() {
    // 创建数据库连接并自动迁移数据表结构

	db.AutoMigrate(&User{})

	// 创建新用户
	user := &User{Name: "张三"}
	err := user.Create(db)
	if err != nil {
		panic(err)
	}

    // 根据 ID 查找用户信息
    var result User
    err = FindByID(db, user.ID, &result)
    if err != nil {
        panic(err)
    }

    fmt.Println(result.Name)

    // 更新用户信息
    user.Name = "李四"
    err = user.Update(db)
    if err != nil {
        panic(err)
    }

    // 删除用户信息
    err = user.Delete(db)
    if err != nil {
        panic(err)
}

以上代码中,我们定义了一个 User 结构体,并嵌入了 Model 结构体。这样做的好处是,User 继承了 Model 的基础属性和方法,同时还可以添加自己的字段。

在具体使用时,我们先调用 Gorm 提供的 AutoMigrate 方法来自动迁移数据表结构。接着创建一个新用户并保存到数据库中,然后根据 ID 查找该用户信息并输出其姓名。随后更新该用户的姓名,并删除该用户记录。

总之,在使用 Gorm 进行对象增删改查操作时,通过泛型实现通用操作非常方便。只需要定义好通用方法和模型结构体,在具体使用时继承即可。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5700

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?