GORM 是一个流行的 Go 语言 ORM(对象关系映射)库,它允许开发者使用 Go 代码来操作数据库,而无需编写 SQL 语句。GORM 通过模型(Model)定义来映射数据库表的结构,使得数据库操作更加直观和方便。
模型定义基础
在 GORM 中,模型定义通常是一个结构体,每个字段都对应数据库中的一个列。GORM 通过结构体标签(Tag)来指定字段与数据库列的映射关系。以下是一些常用的 GORM 标签:
gorm:"type:varchar(12)"
:指定字段的类型为 varchar,长度为 12。gorm:"size:2"
:指定字段的大小。gorm:"column:y_addr"
:自定义列名。gorm:"primaryKey"
:将列定义为主键。gorm:"unique"
:将列定义为唯一键。gorm:"default"
:定义列的默认值。gorm:"not null"
:指定列不可为空。gorm:"embedded"
:嵌套字段。gorm:"embeddedPrefix:s_"
:嵌套字段前缀。
代码示例
根据提供的截图内容,我们可以发现一些字段标签的拼写错误和一些可能的改进点。下面是修改后的代码示例:
go
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// StudentInfo 嵌套结构体,用于存储学生信息
type StudentInfo struct {
Email *string `gorm:"size:32"` // 使用指针允许为空值
Addr string `gorm:"column:y_addr;size:16"`
Gender bool `gorm:"default:true"`
}
// Student 学生模型结构体
type Student struct {
ID uint `gorm:"primaryKey;size:10"`
Name string `gorm:"size:16"`
Age int `gorm:"size:3"`
Email *string `gorm:"size:128"` // 允许为空的电子邮件地址
Info StudentInfo `gorm:"embedded;embeddedPrefix:s_"` // 嵌套 StudentInfo
}
func main() {
// 连接数据库,这里以 SQLite 为例
dsn := "file:./test.db?cache=shared&mode=memory&_fk=1"
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 使用 Debug 模式自动迁移 Student 表
db.Debug().AutoMigrate(&Student{})
}
注意事项
- 指针的使用 :对于可能为空的字段,使用指针类型(如
*string
)可以存储空值。 - 字段大小 :
size
标签用于指定字段的大小,这有助于数据库层面的优化。 - 默认值 :使用
default
标签为字段指定默认值。 - 嵌套结构体 :使用
embedded
标签将一个结构体嵌入到另一个结构体中,同时使用embeddedPrefix
为嵌入字段添加前缀。