Day07:GORM快速入门05 更新| 青训营

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Day07:GORM快速入门05 更新| 青训营

导读

本套笔记是学习完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,使开发人员能够轻松地与数据库进行交互

保存所有字段

要保存所有字段,可以使用 Save 方法。

save()

var user User 
// 使用 Save 方法将数据保存到数据库 
result := db.Save(&user)
db.Save(&User{Name: "jinzhu", Age: 100}) 

更新单个列

要在 GORM 中更新单个列,可以使用 UpdateColumn 方法。

// 假设你有一个名为 user 的结构体,并已经从数据库中查询得到
var user User
// 更新字段的值
user.Name = "New Name"
// 使用 UpdateColumn 方法更新数据库记录的单个列
result := db.Model(&user).UpdateColumn("name", user.Name)

完整代码

package main
import (
  "fmt"
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)
// 用户结构体
type User struct {
  ID   uint   `gorm:"primaryKey"`
  Name string `gorm:"column:name"`
  Age  int    `gorm:"column:age"`
}
func main() {
  // 连接数据库
  dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  // 自动迁移数据库表
  err = db.AutoMigrate(&User{})
  if err != nil {
    panic("Failed to migrate database")
  }
  // 查询用户
  var user User
  result := db.First(&user)
  // 更新字段的值
  user.Name = "New Name"
  // 使用 UpdateColumn 方法更新数据库记录的单个列
  db.Model(&user).UpdateColumn("name", user.Name)
}

我们首先连接到数据库,并使用 AutoMigrate 方法自动迁移数据库表以确保用户表存在。

然后,我们查询并获取要更新的用户。在这里,我们将用户的 Name 字段更新为新的值。

最后,我们使用 Model 方法指定要更新的模型对象,并使用 UpdateColumn 方法将更新后的值保存到数据库中的相应列

更新多个列

可以使用updatas

   package main
import (
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)
// 用户结构体
type User struct {
   ID   uint   `gorm:"primaryKey"`
   Name string `gorm:"column:name"`
   Age  int    `gorm:"column:age"`
}
func main() {
   // 连接数据库
   dsn := "user:password@tcp(localhost:3306)/database? charset=utf8mb4&parseTime=True&loc=Local"
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   // 自动迁移数据库表
   err = db.AutoMigrate(&User{})
   // 查询用户
   var user User
   result := db.First(&user)
   // 更新多个字段的值
   updates := map[string]interface{}{
    "name": "New Name",
    "age":  30,
   }
   // 使用 Updates 方法更新数据库记录的多个列
   db.Model(&user).Updates(updates)
}
  1. 首先,我们通过 gorm.Open 方法连接到数据库,并使用提供的数据库连接信息和配置参数。
  2. 然后,我们使用 db.AutoMigrate 方法自动迁移数据库表,以确保 User 结构体对应的表存在于数据库中。
  3. 接下来,我们使用 db.First 方法查询并获取要更新的用户。将查询结果存储在 user 变量中。
  4. 我们使用一个 map 对象 updates 存储要更新的多个列和它们对应的新值。在这个示例中,我们更新了 Name 列为 "New Name",以及更新了 Age 列为 30。
  5. 最后,我们使用 db.Model(&user).Updates(updates) 方法将更新后的值保存到数据库中的相应列。这里的 &user 表示要更新的模型对象是 userUpdates(updates) 表示要更新的字段和对应的新值。

更新选定字段

// 更新选定的字段 
updates := map[string]interface{}{ "Name": "New Name", } 
// 使用 Updates 方法更新数据库记录的选定字段 
result = db.Model(&user).Updates(updates)

我们将 updates map 对象中只包含了要更新的 Name 字段和对应的值 "New Name"。

然后,我们使用 db.Model(&user).Updates(updates) 方法将更新保存到数据库中的选定字段。这里的 &user 表示要更新的模型对象是 userUpdates(updates) 表示要更新的字段和对应的新值。

批量更新

要实现批量更新多个记录的方法,你可以使用 Updates 方法并传递一个包含要更新字段和对应新值的 map 切片

package main
import (
  "fmt"
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)
// 用户结构体
type User struct {
  ID   uint   `gorm:"primaryKey"`
  Name string `gorm:"column:name"`
  Age  int    `gorm:"column:age"`
}
func main() {
  // 连接数据库
  dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  // 自动迁移数据库表
  err = db.AutoMigrate(&User{})
  // 批量查询用户
  var users []User
  result := db.Find(&users)
   // 更新选定的字段
  updates := map[string]interface{}{
    "Name": "New Name",
    "Age":  30,
  }
  // 使用 Updates 方法更新数据库记录的选定字段
  result = db.Model(&User{}).Updates(updates)
        result.RowsAffected//更新的记录数
}

,我们首先使用 db.Find 查询多个用户,并将查询结果存储在 users 切片中。

然后,我们定义一个 updates map 对象,其中包含了要更新的字段和对应的新值。

最后,我们使用 db.Model(&User{}).Updates(updates) 方法将更新保存到数据库中。这里的 &User{} 表示要操作的是 User 模型对象,Updates(updates) 表示要更新的字段和对应的新值。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 MySQL
|
6月前
|
存储 SQL Go
《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)(下)
《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)
57 0
|
6月前
|
SQL 关系型数据库 Go
《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)(上)
《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)
38 0
|
前端开发 Go API
Day08:GORM快速入门07 has many| 青训营
Day08:GORM快速入门07 has many| 青训营
|
12月前
|
SQL 关系型数据库 MySQL
后端实践--go与数据库 青训营
后端实践--go与数据库 青训营
|
前端开发 Go API
Day07:GORM快速入门04 查找| 青训营
Day07:GORM快速入门04 查找| 青训营
|
前端开发 Go API
Day06:GORM快速入门03 删除| 青训营
Day06:GORM快速入门03 删除| 青训营
|
前端开发 关系型数据库 MySQL
Day06:GORM快速入门02 增加| 青训营
Day06:GORM快速入门02 增加| 青训营
|
存储 前端开发 Go
Day08:GORM快速入门06 HasOne| 青训营
Day08:GORM快速入门06 HasOne| 青训营
|
前端开发 Go API
Day08:GORM快速入门06 属于| 青训营
Day08:GORM快速入门06 属于| 青训营