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
}

在这里插入图片描述

在这里插入图片描述

关联标签

后续会写,现在略过
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cheems~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值