栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

ORM框架Gorm-更新记录

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ORM框架Gorm-更新记录

连接数据库
var db *gorm.DB

func init() {
	dsn := "root:root@tcp(127.0.0.1:3306)/go_orm?charset=utf8mb4&parseTime=True&loc=Local"
	d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: logger.Default.LogMode(logger.Info)})
	if err != nil {
		log.Fatal(err)
	}
	db = d
}
用户结构体
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: %vn", user)
	user.Name = "x王帆"
	user.Active = true
	db.Save(&user)
	fmt.Printf("user: %vn", 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号