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

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.lryc.cn/news/2378214.html

相关文章:

  • vue 中绑定样式 【style样式绑定】
  • 印刷业直角坐标型码垛机器人系统设计与应用研究
  • Mysql存储过程(附案例)
  • 【Web应用】Vue 项目前端项目文件夹和文件介绍
  • Stratix 10 FPGA DDR4 选型
  • Rust 输出到命令行
  • 费曼技巧及提高计划
  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • CMU-15445(4)——PROJECT#1-BufferPoolManager-Task#2
  • 百度智能云千帆携手联想,共创MCP生态宇宙
  • Python 中的 typing.ClassVar 详解
  • 【动态导通电阻】GaN HEMT动态导通电阻的精确测量
  • java 使用zxing生成条形码(可自定义文字位置、边框样式)
  • day19-线性表(顺序表)(链表I)
  • CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏
  • Armijo rule
  • 从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案
  • 贝叶斯优化Transformer融合支持向量机多变量时间序列预测,Matlab实现
  • 执行apt-get update 报错ModuleNotFoundError: No module named ‘apt_pkg‘的解决方案汇总
  • maven中relativepath标签的含义及使用方法
  • C++_STL_map与set
  • 项目依赖版本修改
  • 蚁群算法赋能生鲜配送:MATLAB 实现多约束路径优化
  • 机器学习与人工智能:NLP分词与文本相似度分析
  • 记录一下seata后端数据库由mariadb10切换到mysql8遇到的SQLException问题
  • CUDA学习笔记
  • Python爬虫实战:研究JavaScript压缩方法实现逆向解密
  • 【Linux】Shell脚本中向文件中写日志,以及日志文件大小、数量管理
  • c++ 类的语法3
  • Rust 学习笔记:关于 String 的练习题