gorm update部分字段 https://gitee.com/leijmdas/goweb3.git

发布时间:2026/6/29 18:21:33
gorm update部分字段 https://gitee.com/leijmdas/goweb3.git 文章摘要本文介绍了基于Go语言的数据库操作实现主要展示了两类更新方法UpdateFields2Ret和UpdateFieldsWhere。前者通过主键值更新指定字段并返回影响行数后者通过条件构造器实现条件更新。代码片段演示了用户表字段更新操作包括SQL生成和执行结果。这些方法封装了GORM的基础操作提供了字段选择、条件构建和错误处理等通用功能适用于需要精确控制更新字段和条件的场景。测试案例显示了对用户姓名字段的成功更新验证了方法的有效性。 func (self *BaseDao[P, E]) UpdateFields2Ret(fields []string, entity E) *basedto.IchubResult { if gconv.Int64(entity.PkeyValue()) 0 { return basedto.ResultFail(PkeyValue is zero) } dbc : self.GetDB().Model(entity).Select(fields).Updates(entity) if dbc.Error ! nil { logrus.Error(dbc.Error) return basedto.ResultError(dbc.Error) } return basedto.ResultDataAffected(entity.PkeyValue(), dbc.RowsAffected)func (self *TestDbSuite) Test302_UpdateFields2Ret() { var dao dbentity.NewUsersDao() var entity dbentity.NewUsers() entity.Id 1983799923358830592 entity.Name 雷学明123 var ret dao.UpdateFields2Ret([]string{name}, entity) golog.Info(ret) }}2026/06/28 20:50:49 E:/soft/gitee.com/goweb3/goweb/generaldb/generaldao/basedao.go:1174 [39.967ms] [rows:1] UPDATE users SET updated_at2026-06-28 20:50:49.348,name雷学明123 WHERE id 1983799923358830592func (self *TestDbSuite) Test301_UpdateFieldsWhere() { var dao dbentity.NewUsersDao() dao.DbEq(id, 1983799923358830592) var entity dbentity.NewUsers() entity.Name 雷学明 var ret dao.UpdateFieldsWhere([]string{name}, entity) golog.Info(ret) }func (self *BaseDao[P, E]) UpdateFieldsWhere(fields []string, entity E) *basedto.IchubResult { if !self.IfExistsWhere() { return basedto.ResultFail(UpdateFieldsWhere is empty) } // 只更新非空字段 return self.UpdateFieldsAll(fields, entity) } func (self *BaseDao[P, E]) UpdateFieldsAll(fields []string, entity E) *basedto.IchubResult { var dbc self.GetDB().Table(entity.TableName()).Select(fields) dbc self.BuildWhere(dbc) dbc dbc.Updates(entity) if dbc.Error ! nil { golog.Error(dbc.Error) return basedto.ResultError(dbc.Error) } return basedto.ResultData(dbc.RowsAffected) }