当前位置: 首页 > news >正文

go-数据库基本操作

1. 配置数据库

package mainimport ("gorm.io/driver/mysql""gorm.io/gorm"
)
#配置表结构
type User struct {ID       int64 `json:"id" gorm:"primary_key"` // 主键ID自增长Username stringPassword string
}
#配置连接接信息
func main() {//dsn := "root:zhangfan@123@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})// err == nil 说明 连接成功if err != nil {panic("连接数据库失败")}}

2.创建表

func main() {//dsn := "root:zhangfan@123@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})// err == nil 说明 连接成功if err != nil {panic("连接数据库失败")}// 1.自动创建表db.AutoMigrate(&User{})

3.增加数据

			db.Create(&User{Username: "lisi",Password: "123456",})

4.查询数据

		//4.查询//单个查询u := User{ID: 1}db.First(&u) //过滤其中一条fmt.Printf("%#v\n", u)// 查询所有数据users := []User{}          // 创建一个切片db.Find(&users)            // 查询并将结果填充到 users 切片中fmt.Printf("%#v\n", users) // 使用 %#v 格式化动词打印 users 切片的内容,包括类型信息和值

5.删除数据

	//5.删除// db.Delete(&User{ID: 2}) // 根据主见 删除 id2 的用户// 条件删除db.Where("username = ?", "lisi").Delete(&User{})

6.创建一对多数据表

package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)// 2.定义一个User表
type User struct {gorm.ModelUsername string `json:"username" gorm:"column:username"`//添加外键关联CreditCards []CreditCard
}// 3.定义一个card表
type CreditCard struct {gorm.Model // gorm.Model包含了ID,CreatedAt,UpdatedAt,DeletedAtNumber     stringUserID     uint //这个就是与User表进行关联的外键 结构体+主键就是表关联的外键
}func main() {// 1. 连接数据库dsn := "root:zhangfan@123@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})fmt.Println(db)db.AutoMigrate(User{}, CreditCard{}) //自动创建表结构
6.1 创建一对多数据

创建了一个zhangfan用户并插入两条数据

		user := User{Username: "zhangfan",CreditCards: []CreditCard{ // 创建一个切片{Number: "0001"},{Number: "0002"},},}db.Create(&user)
6.1 插入一对多数据
	//给zhangfan添加一条信用卡数据u := User{Username: "zhangfan"}db.First(&u)db.Model(&u).Association("CreditCards").Append(&CreditCard{Number: "0003"})
6.2 一对多数据关联查询

查询两次

	// 查询关联数据,先查到用户,在根据用户ID查询关联的card数据u := User{Username: "zhangfan"}db.First(&u)  //查询user表的数据fmt.Printf("%#v\n", u.Username)err := db.Model(&u).Association("CreditCards").Find(&u.CreditCards)if err != nil {fmt.Println(err, "err")}//fmt.Println(u)strUser, _ := json.Marshal(&u)fmt.Println(string(strUser))

一次性查找

	//预加载查询 通过 preload方法一对多查询users := []User{}db.Preload("CreditCards").Find(&users)strUser, _ := json.Marshal(&users)fmt.Println(string(strUser))
}

在这里插入图片描述

6.创建多对多数据表操作

package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)func main() {// 1. 连接数据库dsn := "root:zhangfan@123@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})fmt.Println(db)// 创建表db.AutoMigrate(user{}, Language{})}
// 定义多对多表结构
type user struct {gorm.ModelLanguage []Language `gorm:"many2many:user_languages;"` // 定义多对多关系
}
type Language struct {gorm.ModelName string
}

在这里插入图片描述

相关文章:

  • IDEA中git对于指定文件进行版本控制
  • IDEA中springboot项目中连接docker
  • 基于 React Hook 封装 Store 的三种方案
  • 基于大模型的脑出血智能诊疗与康复技术方案
  • 视觉Transformer(Vision Transformer , ViT )
  • 2025/5/16
  • 炼丹学习笔记3---ubuntu2004部署运行openpcdet记录
  • 数学复习笔记 14
  • 精准掌控张力动态,重构卷对卷工艺设计
  • DAY 28 类的定义
  • 内容中台重构企业知识管理路径
  • 力扣HOT100之二叉树:102. 二叉树的层序遍历
  • 【GAN网络入门系列】一,手写字MINST图片生成
  • 前端取经路——量子UI:响应式交互新范式
  • 知识蒸馏实战:用PyTorch和预训练模型提升小模型性能
  • 【笔记】导出Conda环境依赖以复现项目虚拟环境
  • LLaMA-Factory:准备模型和数据集
  • 详解具身智能开源数据集:ARIO(All Robots In One)
  • Java 多线程基础:Thread 类核心用法详解
  • RabbitMQ 消息模式实战:从简单队列到复杂路由(三)
  • 习近平就乌拉圭前总统穆希卡逝世向乌拉圭总统奥尔西致唁电
  • 中国社联成立95周年,《中国社联期刊汇编》等研究丛书出版
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯被执行死刑
  • 在本轮印巴冲突的舆论场上也胜印度一筹,巴基斯坦靠什么?
  • 音乐节困于流量
  • 为什么越来越多景区,把C位留给了书店?