Golang gorm 一对一关系

news2024/11/27 7:34:13

一对一关系


一对一关系比较少,一般用于表的扩展例如一张用户表,有很多字段那么就可以把它拆分为两张表,常用的字段放主表,不常用的字段放详情表。

针对用户表来说可以通过user去点出userinfo。


 

创建表和插入数据

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Teacher struct {
	ID          int
	Name        string
	Age         int
	Gender      bool
	TeacherInfo TeacherInfo
}

type TeacherInfo struct {
	ID        int
	TeacherID int
	Address   string
	Hobby     string
}

func (*Teacher) TableName() string {
	return "teacher"
}

func (*TeacherInfo) TableName() string {
	return "teacherinfo"
}

func main() {
	dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db.Debug().AutoMigrate(&Teacher{}, &TeacherInfo{})

	var teacherList []Teacher
	teacherList = append(teacherList, Teacher{
		Name:   "yanzi",
		Age:    28,
		Gender: false,
		TeacherInfo: TeacherInfo{
			Address: "hangzhou",
			Hobby:   "video",
		},
	}, Teacher{
		Name:   "lucas",
		Age:    30,
		Gender: false,
		TeacherInfo: TeacherInfo{
			Address: "hangzhou",
			Hobby:   "reading",
		},
	})

	db.Create(&teacherList)

}


mysql> desc teacher;
+--------+------------+------+-----+---------+----------------+
| Field  | Type       | Null | Key | Default | Extra          |
+--------+------------+------+-----+---------+----------------+
| id     | bigint     | NO   | PRI | NULL    | auto_increment |
| name   | longtext   | YES  |     | NULL    |                |
| age    | bigint     | YES  |     | NULL    |                |
| gender | tinyint(1) | YES  |     | NULL    |                |
+--------+------------+------+-----+---------+----------------+

mysql> desc teacherinfo;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | bigint   | NO   | PRI | NULL    | auto_increment |
| teacher_id | bigint   | YES  | MUL | NULL    |                |
| address    | longtext | YES  |     | NULL    |                |
| hobby      | longtext | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

mysql> select * from teacher;
+----+-------+------+--------+
| id | name  | age  | gender |
+----+-------+------+--------+
|  1 | yanzi |   28 |      0 |
|  2 | lucas |   30 |      0 |
+----+-------+------+--------+

mysql> select * from teacherinfo;
+----+------------+----------+---------+
| id | teacher_id | address  | hobby   |
+----+------------+----------+---------+
|  1 |          1 | hangzhou | video   |
|  2 |          2 | hangzhou | reading |
+----+------------+----------+---------+

 单单使用take find这些是查询不出teacherinfo的信息的

	var t Teacher
	db.Take(&t)
	fmt.Println(t)

[4.938ms] [rows:-] SELECT count(*) FROM INFORMATION_SCHEMA.table_constraints WHERE constraint_schema = 'test' AND table_name = 'teacherinfo' AND co
nstraint_name = 'fk_teacher_teacher_info'
{1 yanzi 28 false {0 0  }}

想要查询用户详情使用preload

	var t Teacher
	db.Debug().Preload("TeacherInfo").Take(&t)
	fmt.Println(t)

[1.226ms] [rows:1] SELECT * FROM `teacherinfo` WHERE `teacherinfo`.`teacher_id` = 1
[41.415ms] [rows:1] SELECT * FROM `teacher` LIMIT 1                            
{1 yanzi 28 false {1 1 hangzhou video}}  

 

 

删除

	var t Teacher
	db.Take(&t, 2)
	db.Debug().Select("TeacherInfo").Delete(&t)

[3.472ms] [rows:1] DELETE FROM `teacherinfo` WHERE `teacherinfo`.`teacher_id` = 2
[60.613ms] [rows:1] DELETE FROM `teacher` WHERE `teacher`.`id` = 2   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款超强的 Python 分析工具!

这是一个star暴增的项目:PyGWalker,也是目前看来更加轻量级的分析工具! 之前我们的数据分析思路是: 1、利用 R 或者 Python 进行数据分析‍ 2、利用沉跌跌的工具进行数据分析,比如:tableau 今天介绍的*…

Hive 数据仓库介绍

目录 ​编辑 一、Hive 概述 1.1 Hive产生的原因 1.2 Hive是什么? 1.3 Hive 特点 1.4 Hive生态链关系 二、Hive架构 2.1 架构图 2.2 架构组件说明 2.2.1 Interface 2.2.1.1 CLI 2.2.1.2 JDBC/ODBC 2.2.1.3 WebUI 2.2.2 MetaData 2.2.3 MetaStore 2.2…

tokenizers总结

简介 tokenize的目标是把输入的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习embedding表达和后续模型的使用。 tokenize有三种粒度:word/subword/char word词,是最自然的语言单元。对于英文等自然语…

通过数据导入导出功能批量重命名文件名称更简单

在日常工作中,我们经常需要对大量的文件进行重命名,以方便管理和查找。然而,手动一个一个修改文件名称的方式不仅费时费力,而且容易出错。为了提高工作效率,我们可以使用一款名为“固乔文件管家”的软件来实现文件的批…

【MySQL多表查询以及事务、索引】

1. 多表查询 1.1 概述 1.1.1 数据准备 #建议:创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称…

基于自编译的onlyoffice镜像,关于修改字体的问题

基于自编译的onlyoffice镜像,关于修改字体的问题 自编译onlyoffice镜像来自于 https://blog.csdn.net/Gemini1995/article/details/132427908 该镜像里面没有documentserver-generate-allfonts.sh文件,所以需要自己创建一个(建议放在/usr/b…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时,它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时,它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时,它们也会折叠成一个右…

Mybatis学习笔记9 动态SQL

Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客 动态SQL的业务场景: 例如 批量删除 get请求 uri?id18&id19&id20 或者post id18&id19&id20 String[] idsrequest.getParameterValues("id") 那么这句SQL是需要动态的 还…

CI/CD与DevOps:您需要知道的8个核心区别

CI/CD是一种让程序员能迅速并可靠地更新代码的做法。而DevOps则包括一系列方法和思想,这些让开发和运维的人都能更好地协作,使得整个产品从设计到使用都能更加高效地完成。尽管CI/CD和DevOps都是为了让软件开发更高效,但它们在具体怎么做上有…

苹果mac笔记本部分按键失灵怎么回事?5连option键即可解决

苹果mac部分按键突然失灵怎么办? 使用万能的重启大法,数字键 7,8,9 以及 m 等按键失灵,但是其他按键正常。 使用外接键盘发现是可以正常输入的,难道是笔记本键盘坏了?要去售后维修吗? 苹果mac笔记本部分按…

解决Python中的JSON序列化Bug TypeError: Object of type ‘int64‘ is not JSON serializable

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

9_16搜索练习

填涂颜色 此时的递归是可以停下来的&#xff0c;我们需要做到开工没有回头箭&#xff08;不能让他往回走&#xff09; 此处使用的1标记走过的点&#xff0c;&#xff01;0证明走过&#xff0c;走过就停 #include <bits/stdc.h> using namespace std; int a[32][32],b[32]…

看期权哪个软件更好用?数据比较全面直观的那种?

在介绍期权看盘软件之前&#xff0c;我们先来了解一下期权交易的发展史。2015年&#xff0c;国内首只期权上市交易&#xff0c;2019年深交所期权上市&#xff0c;期权市场越来越火&#xff0c;期权分仓软件也是横空出世发展至今&#xff0c;下文介绍看期权哪个软件更好用&#…

链路聚合和VRRP链路聚合

目录 链路聚合 基本术语 配置链路聚合的条件 手工模式 负载分担 LACP模式 活动链路的选举 LACP模式配置 VRRP VRRP的基本概念 VRRP的定时器 VRRP的主备选举 VRRP主备切换 VRRP抢占模式(Preempt Mode) : VRRP监视上行端口 VRRP和MSTP结合应用 VRRP的基本配置 …

信息安全 科技评估分类

声明 本文是学习GB-T 42776-2023 科技评估分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 编码方法 科技评估分类代码由基本分类代码和7个附加分类代码组成&#xff0c;代码结构如图2所示。 图 2 科技评估分类代码结构图 GB/T 42776—2023 …

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…

go语言---锁

什么是锁呢&#xff1f;就是某个协程&#xff08;线程&#xff09;在访问某个资源时先锁住&#xff0c;防止其它协程的访问&#xff0c;等访问完毕解锁后其他协程再来加锁进行访问。这和我们生活中加锁使用公共资源相似&#xff0c;例如&#xff1a;公共卫生间。 死锁 死锁是…

共享股东:一种让连锁门店企业家赚钱的新模式

你是否经营着一家或多家连锁门店&#xff0c;想要提高你的收入和竞争力&#xff1f;你是否想要吸引更多的客户和投资者&#xff0c;让他们成为你的忠实合作伙伴&#xff1f;你是否想要利用互联网的力量&#xff0c;让你的门店变得更加智能和高效&#xff1f;如果你的答案是肯定…

JavaScript速成课—事件处理

目录 一.事件类型 1.窗口事件 2.表单元素事件 3.图像事件 4.键盘事件 5.鼠标事件 二.JavaScript事件处理的基本机制 三.绑定事件的方法 1.DOM元素绑定 2.JavaScript代码绑定事件 3.监听事件函数绑定 四.JavaScript事件的event对象 1.获取event对象 2.鼠标坐标获取…

11、Kubernetes核心技术 - Service

目录 一、概述 二、Endpoint 三、Service资源清单 四、Service 类型 4.1、ClusterIP 4.2、NodePort 4.3、LoadBalancer 4.4、ExternalName 五、Service使用 5.1、ClusterIP 5.1.1、定义Pod资源清单 5.1.2、创建Pod 5.1.3、定义Service资源清单 5.1.4、创建Servic…