Golang GORM 模型定义 结构标签、gorm.Model

模型定义


参考文档:https://gorm.io/zh_CN/docs/models.html

模型一般都是普通的 Golang 的结构体, Go 的基本数据类型,或者指针。 sql.Scanner
driver.Valuer ,同时也支持接口。
type User struct {
    gorm.Model
    Name string
    Age sql.NullInt64
    Birthday        *time.Time
    Email string    `gorm:"type:varchar(100);unique_index"`
    Role string     `gorm:"size:255"` //设置字段的大小为255个字节
    MemberNumber    *string `gorm:"unique;not null"` // 设置 memberNumber 字段唯一且不为空
    Num int         `gorm:"AUTO_INCREMENT"` // 设置 Num字段自增
    Address string  `gorm:"index:addr"` // 给Address 创建一个名字是 `addr`的索引
    IgnoreMe int    `gorm:"-"` //忽略这个字段
}

模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成(创建一个结构体可以将其变为一张表)

定义一张表:

常识:小写属性是不会生成字段的,ID这里其实就是一个主键,主键就是可以自增并且不能重复。

CreatedAt *time.Time `json:"createdAt" gorm:"column:create_at"`  你在创建的时候不需要传这个字段,你创建的时间会帮你自动加进去,在表里面创建的字段名叫create_at。

gorm.Model


gorm.Model 是一个包含一些基本字段的结构体, 包含的字段有 ID , CreatedAt UpdatedAt DeletedAt 。 你可以用它来嵌入到你的模型中,或者也可以用它来建立自己的模型。

你可以用它来嵌入到你的模型中,或者也可以用它来建立自己的模型。
// gorm.Model 定义
type Model struct {
    ID uint `gorm:"primary_key"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt *time.Time
}

// 声明 gorm.Model 模型
// 将字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt` 注入到 `User` 模型中
type User struct {
    gorm.Model
    Name string
}

ID 作为主键


GORM 默认使用 ID 作为主键名。

type User struct {
    ID string // 字段名 `ID` 将被作为默认的主键名
}

// 设置字段 `AnimalID` 为默认主键
type Animal struct {
    AnimalID int64 `gorm:"primary_key"`
    Name string
    Age int64
}

自动生成表结构


AutoMigrate传的是指针对象。

AutoMigrate的逻辑是只新增,不删除,不修改(大小会修改)例如将Name修改为Name1,进行迁移,会多出一个name1的字段

生成表结构如下:

修改大小


我们可以使用gorm的标签进行修改,有两种方式

type User1 struct {
	Id       int64  `gorm:"primary_key",gorm:"size:10"`
	Username string `gorm:"size:10"`
	Password string `gorm:"size:10"`
}

	db.Debug().AutoMigrate(&User1{})


2023/07/25 15:49:14 C:/Users/W10/GolandProjects/day1/gorm/create.go:25
[44.529ms] [rows:0] ALTER TABLE `user1` MODIFY COLUMN `username` varchar(10)

2023/07/25 15:49:14 C:/Users/W10/GolandProjects/day1/gorm/create.go:25
[41.411ms] [rows:0] ALTER TABLE `user1` MODIFY COLUMN `password` varchar(10)

字段标签


标签是声明模型时可选的标记

type User1 struct {
	Id       int64  `gorm:"primary_key;size:2"`
	Username string `gorm:"size:10"`
	Password string `gorm:"column:passwd;size:10"`
}

2023/07/25 16:02:43 C:/Users/W10/GolandProjects/day1/gorm/create.go:25
[21.548ms] [rows:0] ALTER TABLE `user1` ADD `passwd` varchar(10)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值