IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ORM框架Gorm-更新记录 -> 正文阅读

[大数据]ORM框架Gorm-更新记录

用户结构体


type User struct {
	gorm.Model
	Name     string
	Age      int
	Birthday time.Time
	Active   bool
}

给原来的数据库添加字段

db.AutoMigrate(&User{})

在这里插入图片描述

保存所有字段

func update1() {
	var user User
	db.First(&user)
	fmt.Printf("user: %v\n", user)
	user.Name = "x王帆"
	user.Active = true
	db.Save(&user)
	fmt.Printf("user: %v\n", user)
}

运行结果:
在这里插入图片描述数据库数据如下:
在这里插入图片描述

更新单个列

条件更新

	db.Model(&User{}).Where("active = ?", true).Update("Name", "hello")
	// UPDATE `users` SET `name`='hello',`updated_at`='2022-03-10 15:41:00.917' WHERE active = true AND `users`.`deleted_at` IS NULL

运行后数据数据:
在这里插入图片描述

查出需要更新的

var user User
db.First(&user)
db.Model(&user).Update("name", "hello--wf")
//UPDATE `users` SET `name`='hello--wf',`updated_at`='2022-03-10 15:43:24.55' WHERE `users`.`deleted_at` IS NULL AND `id` = 1

在这里插入图片描述

根据条件和model的值进行更新

var user User
	// db.First(&user)
	db.First(&user, 2)
	db.Model(&user).Where("active = ?", true).Update("name", "hello-true")
	// UPDATE `users` SET `name`='hello-true',`updated_at`='2022-03-10 15:44:50.555' WHERE active = true AND `users`.`deleted_at` IS NULL AND `id` = 1
	// UPDATE `users` SET `name`='hello-true',`updated_at`='2022-03-10 15:45:30.254' WHERE active = true AND `users`.`deleted_at` IS NULL AND `id` = 2

数据库运行结果:(因为id为2的数据的active是false所以id为2的数据name没更新)
在这里插入图片描述

更新多列

根据struct更新属性,只会更新非零值得字段

var user User
	db.First(&user)
	db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false})
	// UPDATE `users` SET `updated_at`='2022-03-10 15:53:15.957',`name`='hello',`age`=18 WHERE `users`.`deleted_at` IS NULL AND `id` = 1

注意观察 active没有变为false
在这里插入图片描述

根据map更新属性

var user User
	db.First(&user)
	db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "active": false})
	// UPDATE `users` SET `active`=false,`age`=18,`name`='hello',`updated_at`='2022-03-10 16:08:59.393' WHERE `users`.`deleted_at` IS NULL AND `id` = 1

注意观察active变为false了
在这里插入图片描述

更新选定字段

更新时候选定、忽略某些字段,可以使用select、omit

使用map进行select更新选择字段

var user User
db.First(&user)
db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello-1", "age": 18, "active": false})
// UPDATE `users` SET `name`='hello-1',`updated_at`='2022-03-10 17:07:06.834' WHERE `users`.`deleted_at` IS NULL AND `id` = 1

在这里插入图片描述

使用map进行omit更新忽略字段

var user User
	db.First(&user)
	db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "hello-1", "age": 180, "active": false})
	// UPDATE `users` SET `active`=false,`age`=180,`updated_at`='2022-03-10 17:08:06.567' WHERE `users`.`deleted_at` IS NULL AND `id` = 1

在这里插入图片描述

使用 Struct 进行 Select(会 select 零值的字段)

var user User
db.First(&user)
db.Model(&user).Select("Name", "Age").Updates(User{Name: "new_name", Age: 0})
// UPDATE `users` SET `updated_at`='2022-03-10 17:11:57.372',`name`='new_name',`age`=0 WHERE `users`.`deleted_at` IS NULL AND `id` = 1

在这里插入图片描述

// Select 所有字段(查询包括零值字段的所有字段)
db.Model(&user).Select("*").Update(User{Name: "jinzhu", Role: "admin", Age: 0})

// Select 除 Role 外的所有字段(包括零值字段的所有字段)
db.Model(&user).Select("*").Omit("Role").Update(User{Name: "jinzhu", Role: "admin", Age: 0})

更新hook

func (u *User) BeforeUpdate(tx *gorm.DB) (err error) {
	fmt.Println("BeforeUpdate")
	return
}

在这里插入图片描述

批量更新

根据struct更新

db.Model(User{}).Select("Name", "Age").Where("id IN ?", []int{5, 6}).Updates(User{Name: "hello", Age: 20})
// UPDATE `users` SET `updated_at`='2022-03-10 17:31:29.921',`name`='hello',`age`=20 WHERE id IN (5,6) AND `users`.`deleted_at` IS NULL

在这里插入图片描述

根据map更新

db.Table("users").Where("id IN ?", []int{6, 7}).Updates(map[string]interface{}{"name": "hello1", "age": 19})
// UPDATE `users` SET `age`=19,`name`='hello1' WHERE id IN (6,7)

在这里插入图片描述

参考链接

https://gorm.io/zh_CN/docs/update.html

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:17:06  更:2022-03-11 22:18:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:32:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码