-
gorm.Model的基本定义-
gorm.Model是gorm提供的一个基础结构体,它包含了一些在数据库操作中常用的字段。其定义如下:
-
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time `gorm:"column:created_at"`
UpdatedAt time.Time `gorm:"column:updated_at"`
DeletedAt *gorm.DeletedAt `gorm:"column:deleted_at"`
}
-
当一个结构体嵌入(
embedding)gorm.Model时,这个结构体就自动拥有了这些字段及其相关的行为。
-
ID字段- 主键定义:
ID字段被定义为uint类型,并且带有gorm标签primary_key,这使得它在数据库表中充当主键的角色。在大多数数据库操作中,主键用于唯一标识一条记录。例如,在查询单条记录、更新或删除记录时,通常会通过主键来定位记录。 - 自动递增支持:在很多数据库(如 MySQL)中,这个
ID字段可以自动递增。当插入新记录时,数据库会自动为ID字段分配一个唯一的值,这方便了数据的插入操作,不需要开发者手动指定主键的值。不过,需要注意的是,不是所有的数据库都默认支持自动递增主键,gorm在不同数据库中的行为可能会因为数据库本身的特性而略有差异。
- 主键定义:
-
CreatedAt和UpdatedAt字段- 时间戳记录:
CreatedAt和UpdatedAt字段都是time.Time类型。CreatedAt字段用于记录一条记录的创建时间,UpdatedAt字段用于记录记录的最后更新时间。当执行插入操作时,gorm会自动将CreatedAt字段设置为当前时间;当执行更新操作时,UpdatedAt字段会被更新为当前时间。 - 数据库列名映射:它们的
gorm标签中通过column:created_at和column:updated_at指定了在数据库中的列名。这样可以确保在数据库表中的列名符合开发者的期望或者数据库的命名约定。这种列名映射在不同的数据库环境或者项目的命名规则下非常有用。
- 时间戳记录:
-
DeletedAt字段- 软删除支持:
DeletedAt字段是一个指向gorm.DeletedAt类型的指针。这个字段用于支持软删除操作。当执行软删除时,gorm会将DeletedAt字段设置为当前时间,表示该记录已经被删除。在查询数据时,gorm可以通过配置来决定是否包含已软删除的记录。这种软删除机制相比于直接从数据库中删除记录,有很多优点,比如可以方便地恢复数据,保留数据的历史记录等。
- 软删除支持: