最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang Gorm 更新字段save、update、updates

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

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

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

在更新和刪除之前,要利用之前學(xué)的查詢語句先查詢到數(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ì)象類型,通過這個(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)體指針,通過該結(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í)現(xiàn)?MySQL?數(shù)據(jù)庫事務(wù)

    深入分析Go?實(shí)現(xiàn)?MySQL?數(shù)據(jù)庫事務(wù)

    本文深入分析了Go語言實(shí)現(xiàn)MySQL數(shù)據(jù)庫事務(wù)的原理和實(shí)現(xiàn)方式,包括事務(wù)的ACID特性、事務(wù)的隔離級(jí)別、事務(wù)的實(shí)現(xiàn)方式等。同時(shí),本文還介紹了Go語言中的事務(wù)處理機(jī)制和相關(guān)的API函數(shù),以及如何使用Go語言實(shí)現(xiàn)MySQL數(shù)據(jù)庫事務(wù)。
    2023-06-06
  • GoLang中Strconv庫有哪些常用方法

    GoLang中Strconv庫有哪些常用方法

    這篇文章主要介紹了GoLang中Strconv庫有哪些常用方法,strconv庫實(shí)現(xiàn)了基本數(shù)據(jù)類型與其字符串表示的轉(zhuǎn)換,主要有以下常用函數(shù):?Atoi()、Itia()、parse系列、format系列、append系列
    2023-01-01
  • GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程

    GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程

    這篇文章主要介紹了GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程,需要的朋友可以參考下
    2017-02-02
  • GO語言的數(shù)組array與切片slice詳解

    GO語言的數(shù)組array與切片slice詳解

    這篇文章主要介紹了GO語言的數(shù)組array與切片slice,包括了GO語言數(shù)組定義賦值,GO語言多維數(shù)組,GO語言切片等知識(shí)點(diǎn)需要的朋友可以參考下
    2022-12-12
  • golang實(shí)現(xiàn)并發(fā)控制的方法和技巧

    golang實(shí)現(xiàn)并發(fā)控制的方法和技巧

    golang 是一門支持并發(fā)的編程語言,它提供了 goroutine 和 channel 等強(qiáng)大的特性,讓我們可以輕松地創(chuàng)建和管理多個(gè)執(zhí)行單元,實(shí)現(xiàn)高效的任務(wù)處理,在本文中,我們將介紹一些 golang 的并發(fā)控制的方法和技巧,希望對(duì)你有所幫助
    2024-03-03
  • 如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析

    如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析

    這篇文章主要為大家介紹了如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • go語言實(shí)現(xiàn)簡單http服務(wù)的方法

    go語言實(shí)現(xiàn)簡單http服務(wù)的方法

    這篇文章主要介紹了go語言實(shí)現(xiàn)簡單http服務(wù)的方法,涉及Go語言http操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 如何有效控制Go線程數(shù)實(shí)例探究

    如何有效控制Go線程數(shù)實(shí)例探究

    這篇文章主要為大家介紹了如何有效控制?Go?線程數(shù)的問題探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 深入解析Go語言中for循環(huán)的寫法

    深入解析Go語言中for循環(huán)的寫法

    這篇文章主要介紹了Go語言中for循環(huán)的寫法,是Golang入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Golang協(xié)程池gopool設(shè)計(jì)與實(shí)現(xiàn)

    Golang協(xié)程池gopool設(shè)計(jì)與實(shí)現(xiàn)

    本文主要介紹了Golang協(xié)程池gopool設(shè)計(jì)與實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

景东| 平阳县| 东乌珠穆沁旗| 永靖县| 锡林浩特市| 广安市| 万山特区| 房产| 德格县| 博爱县| 淮南市| 图片| 莆田市| 定州市| 大石桥市| 榆林市| 凤城市| 榆社县| 怀集县| 贵溪市| 雷波县| 凤庆县| 兰考县| 视频| 时尚| 茂名市| 浪卡子县| 和林格尔县| 科尔| 石嘴山市| 肥西县| 樟树市| 乐平市| 莱西市| 阜阳市| 神农架林区| 榕江县| 禹州市| 叶城县| 尉氏县| 榆林市|