导读
本套笔记是学习完Gin框架之后的下一个阶段,通过Gin框架我们可以很方便的和前端进行交互,下一步就是和数据库进行交互,这就需要使用GORM。本套笔记就是带你快速上手GORM,学习完这个之后就可以完成大项目的开发了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。
本套课程基于GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.进行讲解,是对这个的补充解释说明。
注意
代码详解大部分是注释的形式给出,请留意代码注释。
GORM介绍
GORM(Go Object Relational Mapping)是一个在 Go 语言中使用的优秀的 ORM(对象关系映射)库。它提供了简单且强大的 API,使开发人员能够轻松地与数据库进行交互
Has One
has one
与另一个模型建立一对一的关联,但它和一对一关系有些许不同。 这种关联表明一个模型的每个实例都包含或拥有另一个模型的一个实例。
例如银行卡
// User 有一张 CreditCard,UserID 是外键 type User struct { gorm.Model CreditCard CreditCard } type CreditCard struct { gorm.Model Number string UserID uint }
检索
type User struct { ID uint Name string CreditCard CreditCard } type CreditCard struct { ID uint Number string UserID uint } func GetAll(db *gorm.DB) ([]User, error) { var users []User err := db.Preload("CreditCard").Find(&users).Error return users, err } func main() { db, _:= gorm.Open(mysql.New(mysql.Config{ DSN: "root:Lycdemima1@@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local", // DSN data source name DefaultStringSize: 256, // string 类型字段的默认长度 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置 }), &gorm.Config{}) //连接数据库 users, err := GetAll(db) if err != nil { log.Fatal(err) } for _, user := range users { fmt.Printf("User %d: %s\n", user.ID, user.Name) if user.CreditCard.ID != 0 { fmt.Printf(" Credit Card: %s\n", user.CreditCard.Number) } else { fmt.Println(" No Credit Card found") } } }
User
和 CreditCard
是两个模型,它们之间存在一对一的关联关系。User
模型包含一个名为 CreditCard
的字段,用于存储关联的信用卡信息。
GetAll
函数使用 Preload
方法来预加载关联的信用卡信息,并使用 Find
方法检索所有用户及其关联的信用卡。最后,将得到的用户列表打印出来
重写外键和重写引用
方法与Belongs to的一样
外键约束
方法与Belongs to的一样