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 进行对象增删改查操作时,通过泛型实现通用操作非常方便。只需要定义好通用方法和模型结构体,在具体使用时继承即可。


 
                             
         
        
 
         
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                