golang工程组件篇对象关系映射gorm之Model的定又与tag的使用

当谈到golang中的ORM(Object-Relational Mapping)时,gorm是一个常用的框架。在此,我们将探讨gorm中的Model定义和tag使用。

  1. Model定义

在gorm中,Model定义表示数据库表和golang结构体之间的映射关系。基本上,每个数据库表都对应着一个golang结构体。

一个示例代码如下:

type User struct {
    gorm.Model
    Name string
    Age  int
}

该示例定义了一个名为User的结构体,并指定了它与gorm.Model之间的关系。gorm.Model包含了一些默认字段(ID、CreatedAt、UpdatedAt和DeletedAt)以及一些方法(BeforeCreate、BeforeUpdate等)。

  1. Tag使用

Tag是为了描述数据类型而添加的元信息。在ORM框架中,Tag通常用于描述字段对应数据库列的信息。在gorm中,可以使用tag来自定义表名、列名、约束等信息。

以下是一些常见的tag:

  • column:指定列名。
  • type:指定数据类型。
  • not null:指定不为空。
  • unique:指定唯一性约束。
  • default:指定默认值。
  • primary_key:指定主键。
  • auto_increment:指定自增长。

示例如下:

type Product struct {
    ID          uint   `gorm:"primaryKey"`
    Code        string `gorm:"uniqueIndex"`
    Price       uint
}

这个示例定义了一个Product结构体,其中包含了ID、Code和Price字段。它还使用tag定义了ID字段为主键,并将Code定义为唯一索引。

  1. 结合使用

在gorm中,Model定义与tag结合使用可以实现更灵活的ORM映射。以下是一个完整的示例:

type Product struct {
    gorm.Model
    Code  string `gorm:"uniqueIndex"`
    Price uint
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 自动迁移 schema
    db.AutoMigrate(&Product{})

    // 创建记录
    db.Create(&Product{Code: "D42", Price: 100})

    // 查询单个记录
    var product Product
    db.First(&product, "code = ?", "D42")

    // 更新记录 - 将product的price更新为200
    db.Model(&product).Update("Price", 200)

    // 删除记录 - 删除product
    db.Delete(&product, 1)
}

这个示例演示了如何使用gorm创建、查询、更新和删除表格中的数据。代码中的Model定义指定了表名及默认字段;而tag则用于自定义列名和约束信息。

总结

在golang中,gorm提供了强大且灵活的ORM框架。Model定义与tag结合使用可以轻松地完成数据库表格和golang结构体之间的映射关系,并支持对数据库操作进行自动化迁移、增删改查等操作。

猜你喜欢

转载自blog.csdn.net/SMILY12138/article/details/130927843
今日推荐