Gorm -- изменить записи

обновить одно поле

user := &model.User{
    
    
	Id:   5511,
	Name: "测试goper",
	Age:  10,
}

Изменить информацию строки по идентификатору

Использование модели (пользователя) GORM по умолчанию изменит информацию о строке запроса в пользователе .

db.Debug().Model(user).UpdateColumn("name", "测试修改")
----------------------------
UPDATE `user` SET `name`='测试goper',`age`=10 WHERE `id` = 5511

Изменить записи в соответствии с условиями запроса

db.Debug().Model(&model.User{
    
    }).Where("name = ?","测试goper").Update("name", "测试修改")
-------------------------------
UPDATE `user` SET `name`='重置了姓名',`name`='测试修改' WHERE name = '测试goper'

Массовое обновление полей

Измените другие поля в соответствии с первичным ключом класса сущности.

Измените поля, назначенные в классе сущностей.

result := db.Debug().Updates(&user)
if result.Error != nil {
    
    
	fmt.Println(result.Error)
}
-------------------------------------
UPDATE `user` SET `name`='测试goper',`age`=10 WHERE `id` = 5511

Укажите идентификатор для изменения других полей (класс объекта модели)

Следует отметить, что если вы используете класс сущности модели для обновления поля, поле должно быть ненулевым, иначе поле не будет обновлено.

db.Debug().Model(user).Updates(model.User{
    
    InfantName: "ceshi2", Age: 18})
db.Debug().Model(user).Updates(model.User{
    
    InfantName: "ceshi2", Age: 0})
---------------------------------
UPDATE `user` SET `infant_name`='ceshi2',`age`=18 WHERE `id` = 5511
UPDATE `user` SET `infant_name`='ceshi2' WHERE `id` = 5511

Укажите ID для изменения других полей (словарь)

Измените информацию о строке в виде словаря, не беспокоясь о ненулевых значениях.

db.Debug().Model(user).Updates(map[string]interface{
    
    }{
    
    "name": "批量修改", "age": 20})
db.Debug().Model(user).Updates(map[string]interface{
    
    }{
    
    "name": "批量修改", "age": 0})
-----------------------------
UPDATE `user` SET `age`=20,`name`='批量修改' WHERE `id` = 5511
UPDATE `user` SET `age`=0,`name`='批量修改' WHERE `id` = 5511

Укажите значение поля, которое необходимо изменить

Первая строка изменяет только поле имени, а второй абзац изменяет поля имени и возраста.

db.Debug().Model(user).Select("name").Updates(model.User{
    
    Name: "ceshi2", Age: 18})
db.Debug().Model(user).Select("name", "age").Updates(map[string]interface{
    
    }{
    
    "name": "ceshi2", "age": 0})
----------------------------
UPDATE `user` SET `name`='ceshi2' WHERE `id` = 5511
UPDATE `user` SET `age`=0,`name`='批量修改' WHERE `id` = 5511

Значения поля щита, которые не нужно изменять

Не изменять поле имени

db.Debug().Model(user).Omit("name").Updates(model.User{
    
    Name: "ceshi2", Age: 18})
db.Debug().Model(user).Omit("name").Updates(map[string]interface{
    
    }{
    
    "name": "批量修改", "age": 0})
------------------------------
UPDATE `user` SET `age`=18 WHERE `id` = 5511
UPDATE `user` SET `age`=0 WHERE `id` = 5511

Используйте функцию хука

Порядок выполнения функции хука

Перед сохранением - Перед обновлением - После обновления - После сохранения

Используйте BeforUpdate для проверки модификации

Изменить пользователя модели

func (u *User) BeforeUpdate(tx *gorm.DB) (err error) {
    
    
	// u.UserDesc = "使用钩子函数更新了一个属性"
	// return

	if tx.Statement.Changed("Name") {
    
    
		fmt.Println("修改了姓名")
	}

	if tx.Statement.Changed("Name", "UserDesc") {
    
    
		fmt.Println("修改了姓名或用户描述")
	}

	if tx.Statement.Changed() {
    
    
		fmt.Println("修改了任意信息")
	}
	return nil
}
db.Debug().Model(user).Update("name", "测试修改")
----------------
修改了姓名
UPDATE `user` SET `name`='测试修改' WHERE `id` = 5511

нет функции хука

Обновление с использованием UpdateColumn и UpdateColumns.
Следует отметить, что после того, как мы используем UpdateColumn для модификации, значения полей в классе сущности модели также будут обновлены. Таким образом, имя во втором измененном содержимом ниже также является «измененным именем».

db.Debug().Model(user).UpdateColumn("name", "修改姓名")
db.Debug().UpdateColumns(user)
----------------------------------
UPDATE `user` SET `name`='修改姓名' WHERE `id` = 5511
UPDATE `user` SET `name`='修改姓名',`age`=10 WHERE `id` = 5511

Полное обновление таблицы

Укажите имя таблицы напрямую или используйте пустой класс сущности модели пользователя,

db.Debug().Table("user").Where("1=1").Updates(map[string]interface{
    
    }{
    
    
	"name": "Test2",
})
db.Debug().Model(&model.User{
    
    }).Where("1=1").Updates(&model.User{
    
    
	Name: "Test",
})
----------------------------
UPDATE `user` SET `name`='Test2'
UPDATE `user` SET `name`='Test'

Полное обновление таблицы должно иметь условие where, в противном случае будет сообщено об ошибке, а условие Missing Where отсутствует, потому что gorm не разрешает полное обновление таблицы по умолчанию
или добавляет Session AllowGlobalUpdate: true

db.Debug().Table("user").Session(&gorm.Session{
    
    AllowGlobalUpdate: true}).Updates(map[string]interface{
    
    }{
    
    
	"name": "Test5",
})
--------------------------------
UPDATE `user` SET `name`='Test5'

Пользовательский SQL с использованием EXEC

db.Debug().Exec("UPDATE user SET name = ?", "Test4")
------------------------
UPDATE user SET name = 'Test4'

Используйте выражения SQL

используйте горм.Выражение("")

db.Debug().Table("user").Where("id = ?", 521).Updates(map[string]interface{
    
    }{
    
    "name": gorm.Expr("concat('SQL','表达式')")})
------------------------------
UPDATE `user` SET `name`=concat('SQL','表达式') WHERE id = 521

Supongo que te gusta

Origin blog.csdn.net/qq_40096897/article/details/129489201
Recomendado
Clasificación