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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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) 表示要更新的字段和对应的新值。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
传感器 数据挖掘
振弦传感器信号转换器在岩土工程监测中的注意事项
振弦传感器是岩土工程中常用的一种监测设备,用于监测土体和岩体的振动情况。而振弦传感器信号转换器则是将传感器所获得的振动信号转换为人类可读的数据,以方便监测人员进行数据分析和工程决策。
振弦传感器信号转换器在岩土工程监测中的注意事项
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
5129 0
|
7月前
|
机器学习/深度学习 数据采集 人工智能
运维人别硬扛了!看AI怎么帮你流程标准化又快又稳
运维人别硬扛了!看AI怎么帮你流程标准化又快又稳
440 35
|
前端开发 Go API
Day08:GORM快速入门07 has many| 青训营
Day08:GORM快速入门07 has many| 青训营
|
存储 网络安全 数据中心
【Azure 应用服务】Function App / App Service 连接 Blob 报错
【Azure 应用服务】Function App / App Service 连接 Blob 报错
121 0
|
机器人 索引 SEO
如何让谷歌收录自己的网站?谷歌多久收录我的网站?
你要相信,你自己的网站在谷歌没有流量,没有排名,不是谷歌出了问题,而是你的认知出了问题。
1481 0
如何让谷歌收录自己的网站?谷歌多久收录我的网站?
|
定位技术 开发工具
openGPS.cn - 基于ip的定位技术分享,高精度IP定位
利用业余时间自己做了个网站,集成了几个第三方数据源,对比IP地址查询的功能: 普通IP定位:https://www.opengps.cn/Data/IP/IPSearch.aspx 高精度IP定位:https://www.opengps.cn/Data/IP/IPHighAccuracy.aspx 其中,高精度IP定位为百度提供的服务,个人理解其工作原理应当是: 1,用户手机里
7310 1
|
存储 Java 应用服务中间件
eclipse怎么导入web项目?看这篇为你解决!
在导入别人写好或者自己写的web项目要确定以下几点,防止导入的时候出现错误。确认eclipse的版本确认jdk的版本确认你的服务器版本下面我们来进行实战导入web项目是为了将项目的代码和资源文件导入到一个web服务器中,以便通过网络访问和运行项目。导入web项目的主要目的是将项目部署到互联网上,使其他用户可以通过浏览器访问和使用项目。总之,导入web项目可以帮助您将应用程序推广到更广泛的用户群体,并实现实时更新和全平台访问。这为项目的成功和用户体验提供了巨大的好处。
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营