欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang Gorm 更新字段save、update、updates

 更新時(shí)間:2023年12月25日 16:28:16   作者:富士康質(zhì)檢員張全蛋  
在gorm中,批量更新操作可以通過(guò)使用Update方法來(lái)實(shí)現(xiàn),本文主要介紹了Golang Gorm 更新字段save、update、updates,具有一定的參考價(jià)值,感興趣的可以了解一下

更新和刪除操作的前提條件都是要在找到數(shù)據(jù)的情況下,先要查詢到數(shù)據(jù)才可以做操作。

更新的前提的先查詢到記錄,Save保存所有字段,用于單個(gè)記錄的全字段更新,它會(huì)??厮凶侄?,即使零值也會(huì)保存。

在更新和刪除之前,要利用之前學(xué)的查詢語(yǔ)句先查詢到數(shù)據(jù),再去更新,也就是使用find take先去查詢所需要的記錄,再去更新!

save 更新單條記錄并且更新所有字段

用于單條記錄的全部字段更新,它會(huì)保留所有字段,即使0值也會(huì)去更新。 

db.Debug().Save(&s)

UPDATE `student` SET `name`='test',`age`=60,`email`='123@qq.com' WHERE `id` = 7

可以看到會(huì)更新零值和多個(gè)字段。 

	var s Student
	db.Debug().Take(&s, "name = ?", "test")
	fmt.Println(s)
	s.Age = 60
	db.Debug().Save(&s)
	fmt.Println(s)

[1.423ms] [rows:1] SELECT * FROM `student` WHERE name = 'test' LIMIT 1
{7 test 110 0xc000209140}   
                                                                                                                                                                                     
[5.531ms] [rows:1] UPDATE `student` SET `name`='test',`age`=60,`email`='123@qq.com' WHERE `id` = 7
{7 test 60 0xc000209140} 

Save + Select 只更新某個(gè)字段

只更新某個(gè)字段  select + save      select是字段的名字name,不是Name

	var s Student
	db.Debug().Take(&s, "name = ?", "test")
	s.Age = 50
	db.Debug().Select("age").Save(&s)
	fmt.Println(s)

[2.220ms] [rows:1] SELECT * FROM `student` WHERE name = 'test' LIMIT 1
[8.689ms] [rows:1] UPDATE `student` SET `age`=50 WHERE `id` = 7 

update 更新單個(gè)字段 find+update、take+update、model+where+update

model 是聲明映射關(guān)系的對(duì)象類型,通過(guò)這個(gè)對(duì)象類型,找到表名和字段 

	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Update("age", 10)
	fmt.Println(s)

[1.258ms] [rows:3] SELECT * FROM `student` WHERE `student`.`id` IN (1,2,3)
                      
[7.232ms] [rows:3] UPDATE `student` SET `age`=10 WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 10 <nil>} {2 lucas 10 <nil>} {3  10 <nil>}] 

Take + Update 

var s Student
db.Debug().Take(&s, "name = ?", "lucas").Update("age", 18)

UPDATE `student` SET `age`=18 WHERE name = 'lucas' AND `id` = 3 LIMIT 1

Model + Where + Update 

model() 括號(hào)里面是一個(gè)結(jié)構(gòu)體指針,通過(guò)該結(jié)構(gòu)體找到對(duì)應(yīng)的表! 

var s Student
db.Debug().Model(&s).Where("name = ?", "lucas").Update("age", 106)

[7.091ms] [rows:1] UPDATE `student` SET `age`=106 WHERE name = 'lucas'

更新多個(gè)字段 updates  Model(&x{}) + Where + Updates

save是批量更新字段,但是想更新某個(gè)字段,updates可以接受結(jié)構(gòu)體類型和map類型。

updates之前,你必須先查找,你這里可以使用take + updates,find + updates,model + where等等,updates里面是具體的結(jié)構(gòu)體即可。 

	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Updates(&Student{Age: 66})
	fmt.Println(s)

[6.909ms] [rows:3] UPDATE `student` SET `age`=66 WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 66 <nil>} {2 lucas 66 <nil>} {3  66 <nil>}]  
	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Updates(map[string]any{
		"name": "lucas",
	})

[4.648ms] [rows:1] UPDATE `student` SET `name`='lucas' WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 66 <nil>} {2 lucas 66 <nil>} {3 lucas 66 <nil>}]  

實(shí)際使用中的一段代碼

	if err := mysql.DB.Model(&model.Book{}).Where("id = ?", book.ID).Updates(book).Error; err != nil {
		logger.Error(fmt.Sprintf("更新book失敗:%v", err))
		return errors.New(fmt.Sprintf("更新book失敗:%v", err))
	}

到此這篇關(guān)于Golang Gorm 更新字段save、update、updates的文章就介紹到這了,更多相關(guān)Golang Gorm 更新字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Go設(shè)計(jì)模式之原型模式講解和代碼示例

    Go設(shè)計(jì)模式之原型模式講解和代碼示例

    原型是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠復(fù)制對(duì)象,甚至是復(fù)雜對(duì)象,而又無(wú)需使代碼依賴它們所屬的類,本文將通過(guò)代碼示例示例給大家講解一下Go 原型模式,感興趣的小伙伴可以參考閱讀
    2023-07-07
  • Golang性能優(yōu)化的技巧分享

    Golang性能優(yōu)化的技巧分享

    性能優(yōu)化的前提是滿足正確可靠、簡(jiǎn)潔清晰等質(zhì)量因素,針對(duì)?Go語(yǔ)言特性,本文為大家整理了一些Go語(yǔ)言相關(guān)的性能優(yōu)化建議,感興趣的可以了解一下
    2023-07-07
  • 重學(xué)Go語(yǔ)言之錯(cuò)誤處理與異常機(jī)制詳解

    重學(xué)Go語(yǔ)言之錯(cuò)誤處理與異常機(jī)制詳解

    Go語(yǔ)言的開(kāi)發(fā)者顯然覺(jué)得?try-catch被濫用了,因此?Go不支持使用?try-catch語(yǔ)句捕獲異常處理,那么,Go語(yǔ)言是如何定義和處理程序的異常呢,下面我們就來(lái)看看吧
    2023-08-08
  • go語(yǔ)言中proto文件的使用

    go語(yǔ)言中proto文件的使用

    在Go語(yǔ)言編程中,.proto文件用于定義Protocol?Buffers數(shù)據(jù)結(jié)構(gòu)和服務(wù),是實(shí)現(xiàn)跨語(yǔ)言通信和高效序列化的關(guān)鍵,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • 在golang中使用Sync.WaitGroup解決等待的問(wèn)題

    在golang中使用Sync.WaitGroup解決等待的問(wèn)題

    這篇文章主要介紹了在golang中使用Sync.WaitGroup解決等待的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • go?colly?爬蟲實(shí)現(xiàn)示例

    go?colly?爬蟲實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了go?colly?爬蟲實(shí)現(xiàn)示例,效果是根據(jù)輸入的瀏覽器cookie及excel必要行列號(hào),從excel中讀取公司名稱,查詢公司法人及電話號(hào)碼。并寫回到excel中指定行
    2022-09-09
  • Go語(yǔ)言中的if條件語(yǔ)句使用詳解

    Go語(yǔ)言中的if條件語(yǔ)句使用詳解

    這篇文章主要介紹了Go語(yǔ)言中的if條件語(yǔ)句的使用,包括if...else語(yǔ)句以及相關(guān)嵌套,需要的朋友可以參考下
    2015-10-10
  • Go語(yǔ)言編程入門超級(jí)指南

    Go語(yǔ)言編程入門超級(jí)指南

    這篇文章主要介紹了Go語(yǔ)言編程的入門指南,包括對(duì)Go的變量及函數(shù)的基本介紹,需要的朋友可以參考下
    2016-01-01
  • Golang中的自定義函數(shù)類型詳解

    Golang中的自定義函數(shù)類型詳解

    在 Golang 中,type 關(guān)鍵字用于定義自定義類型,函數(shù)也是一種數(shù)據(jù)類型,因此可以使用 type 關(guān)鍵字來(lái)定義函數(shù)類型,本文就給大家詳細(xì)介紹一下Golang中的自定義函數(shù)類型,需要的朋友可以參考下
    2023-07-07
  • GO日志打印如何添加goroutineid

    GO日志打印如何添加goroutineid

    今天想給日志添加一個(gè)前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問(wèn)題的排查,做日志跟蹤,下面給大家分享GO日志打印如何添加goroutineid,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評(píng)論