Day08:GORM快速入门06 HasOne| 青训营

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Day08:GORM快速入门06 HasOne| 青训营

导读

本套笔记是学习完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")
    }
  }
}

UserCreditCard 是两个模型,它们之间存在一对一的关联关系。User 模型包含一个名为 CreditCard 的字段,用于存储关联的信用卡信息。

GetAll 函数使用 Preload 方法来预加载关联的信用卡信息,并使用 Find 方法检索所有用户及其关联的信用卡。最后,将得到的用户列表打印出来

重写外键和重写引用

方法与Belongs to的一样

外键约束

方法与Belongs to的一样


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
5129 0
|
5月前
|
存储 UED 开发者
14.HarmonyOS弹性表单设计精解:flexGrow与空间分配策略
在现代移动应用开发中,表单是最常见的交互界面之一。一个设计良好的表单不仅要美观,还需要具备良好的自适应能力,能够在不同屏幕尺寸下保持最佳的用户体验。本教程将深入探讨HarmonyOS ArkUI框架中的弹性布局技术,特别是flexGrow属性在表单设计中的应用,帮助开发者创建出既美观又实用的自适应表单界面。
185 4
|
监控 Java API
|
存储 算法 搜索推荐
408王道数据结构强化——应用题(三)
408王道数据结构强化——应用题
535 1
408王道数据结构强化——应用题(三)
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
SQL Python
Python3 notes
Python3 notes
用八爪鱼RPA提升企业人员招聘效率,快速找到理想人才!
八爪鱼rpa的使用非常简单,无需编程,即可实现招聘流程的自动化。企业只需根据自己的需求,配置八爪鱼rpa的应用流程,即可通过八爪鱼rpa自动执行招聘任务。这样,企业可以快速找到合适的人才,提高招聘效率,节省人力成本。
|
关系型数据库 MySQL 数据安全/隐私保护
|
物联网 开发者
NB-LOT 常用 AT 指令介绍 | 学习笔记
快速学习 NB-LOT 常用 AT 指令介绍
NB-LOT 常用 AT 指令介绍 | 学习笔记