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

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
}

在这里插入图片描述

http://www.xdnf.cn/news/6648.html

相关文章:

  • 云存储最佳实践
  • 【PhysUnits】4.1 类型级比特位实现解释(boolean.rs)
  • 大数据革命:转变商业洞察力
  • 虹桥前湾印象城MEGA品牌大会灵感迸发,共绘湾系生活新章
  • 智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖
  • 卓力达电铸镍网:精密制造与跨领域应用的创新典范
  • 预测模型开发与评估:基于机器学习的数据分析实践
  • 数据服务共享平台方案
  • 分布式锁: Redisson红锁(RedLock)原理与实现细节
  • 【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
  • 双流芯谷产业园:元宇宙枢纽的区位密码
  • IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别
  • 泰迪杯特等奖案例深度解析:基于MSER-CNN的商品图片字符检测与识别系统设计
  • 会议分享|高超声速流动测量技术研讨会精彩探析
  • 深入探索:Core Web Vitals 进阶优化与新兴指标
  • Windows11安装rockerMq5.0+以及springboot集成rockerMq
  • 现代计算机图形学Games101入门笔记(十四)
  • YOLO12改进-Backbone-引入MobileNetV4替换backbone,平衡精度与效率的问题
  • 在服务器上安装AlphaFold2遇到的问题(1)
  • LLaMA-Factory:准备模型和数据集
  • 【软件测试学习day8】性能测试相关指标
  • WebGL2光照效果
  • DeepSeek解读道德经 第三十四章
  • 背包问题详解
  • 华为云Flexus+DeepSeek征文|SpringBoot开发实战:基于ModelArts Studio高效集成DeepSeek大模型服务
  • 【“星睿O6”评测】对比高通8Gen3分类、检测、分割、超分网络的AIBenchmark测试
  • 对置式光电传感器市场报告:预计2031年全球市场销售额将攀升至 5.68 亿美元
  • ChatGPT再升级!
  • JavaScript 时间转换:从 HH:mm:ss 到十进制小时及反向转换
  • 拟合(最小二乘拟合)