gorm模型创建以及关键标签

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: gorm模型创建以及关键标签

模型

模型定义

什么是模型

模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成

人话:一个结构体,携带gorm规定的标签,或者实现了gorm的接口

作用:用模型就可以进行相关数据库的操作,比如说建表,对某个表的增删改查,一对一,一对多关系的联查等,是gorm进行各种操作的基础,一个书写良好的模型会让你对数据库的操作事半功倍

模型的约定

约定:GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间

func main() {
  db, _ := gorm.Open(mysql.New(mysql.Config{DSN: "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"}), &gorm.Config{})
  type User struct {
    ID           uint
    Name         string
    Email        *string
    Age          uint8
    Birthday     *time.Time
    MemberNumber sql.NullString
    ActivatedAt  sql.NullTime
    CreatedAt    time.Time
    UpdatedAt    time.Time
  }
  db.AutoMigrate(&User{})
}

GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt。

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

所以上面的模型我们可以修改为

type User struct {
  gorm.Model //嵌入结构体
  Name         string
  Email        *string
  Age          uint8
  Birthday     *time.Time
  MemberNumber sql.NullString
  ActivatedAt  sql.NullTime
}

嵌入结构体

当你有一个公用的结构体想要放入其他结构中的时候只需要以匿名结构体的形式放入它将会自动继承所有字段

type MyModel struct {
  UUid int
}
type User struct {
  gorm.Model
  MyModel
  Name         string
  Email        *string
  Age          uint8
  Birthday     *time.Time
  MemberNumber sql.NullString
  ActivatedAt  sql.NullTime
}

如果你不想用匿名结构你可以加入embedded标签让其嵌入

type MyModel struct {
  UUid int
}
type User struct {
  gorm.Model
  MyModel      MyModel `gorm:"embedded"`
  Name         string
  Email        *string
  Age          uint8
  Birthday     *time.Time
  MemberNumber sql.NullString
  ActivatedAt  sql.NullTime
}

关键标签embeddedPrefix:'前缀’通过这个来区分是不是匿名结构进入的

type User struct {
  gorm.Model
  MyModel      MyModel `gorm:"embedded;embeddedPrefix:prefix"`
  Name         string
  Age          uint8
}

关键标签

func main() {
  db, _ := gorm.Open(mysql.New(mysql.Config{DSN: "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"}), &gorm.Config{})
  db.AutoMigrate(&User{})
}
type Model struct {
  UUID uint      `gorm:"primaryKey"`
  Time time.Time `gorm:"column:my_time"`
}
type User struct {
  Model        Model   `gorm:"embedded;embeddedPrefix:my_"`
  Name         string  `gorm:"default:wxf"`
  Email        *string `gorm:"not null"`
  Age          uint8   `gorm:"comment:年龄"`
  Birthday     *time.Time
  MemberNumber sql.NullString
  ActivatedAt  sql.NullTime
}

关联标签

后续会写,现在略过


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
Go 数据库
GORM模型与约定
GORM模型与约定
121 0
|
8月前
|
应用服务中间件 数据库 AHAS
gorm 一对一关系 以及 关联的操作
gorm 一对一关系 以及 关联的操作
193 0
|
8月前
gorm 一对多关系 以及预加载的用法
gorm 一对多关系 以及预加载的用法
138 0
|
8月前
|
JSON 数据库 数据格式
gorm 自定义数据的使用
gorm 自定义数据的使用
77 0
|
8月前
|
Python
创建模型
创建模型。
35 1
|
8月前
|
数据库 索引
gorm 多态以及关联标签
gorm 多态以及关联标签
73 0
|
SQL Unix Go
GORM V2 模型定义、约定、标签
GORM V2 模型定义、约定、标签
226 0
|
SQL 数据库连接 数据库
Gorm学习(四)基础:关联
要定义一个 belongs to 关系,数据库的表中必须存在外键。默认gorm使用(关联属性类型 + 主键)组成外键名,如上面的例子User + ID 组成UserID,UserID就作为Profile的外键。
962 0
Gorm学习(四)基础:关联
|
BI
如何在. doc文件中动态嵌入table
如何在. doc文件中动态嵌入table
100 0
|
Java 数据库
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
212 0

热门文章

最新文章