gorm 注意点归纳 0值更新

本文总结了GORM使用过程中的关键点:scan在软删除后仍能查询;事务提交前不应返回;save方法会插入或更新记录,但会包含空值;更新操作应避免0值更新,推荐使用update方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. scan 和 find

软删除的scan 也可以查出来。一般不用scan

2. 事务提交 注意在事务提交之前不应该return

// 该写法有错误,return 导致事务没有提交,在else 也应该存在 Rollback
status := 1
tx := db.Begin()
if status == 1 {
  // 做一些操作
tx.Rollback()
}else{
return 
}
tx.commit()

3. save 虽然可以insert 或者update 。但是 update会把空值也更新进去。所以更新还是用update 

4. gorm 0值更新问题

type CompanyRelation struct {
	gorm.Model
	RegularCheck   *int8     `json:"regular_check"`   //  0否 1是
}

type CompanyRelationData struct {
	gorm.Model
	RegularCheck   *int8     `json:"regular_check"`   //  0否 1是
}

// 假设表名为 company_relation
b:=0

data := CompanyRelation{
RegularCheck   :b,
}

data2 := CompanyRelation{
RegularCheck   :&b,
}
db.Model(&CompanyRelation{}).updates(data)   // 会更新
db.Model(&CompanyRelation{}).updates(data2)  // 不会更新
// 结论 定义结构体时,如有0值更新需要,则需要 把表结构体的字段改为指针
// 另外需要给查询单独定义一个结构体即:
type CompanyRelation struct {  // 更新用这个
	gorm.Model
	RegularCheck   *int8     `json:"regular_check"`   //  0否 1是
}

type CompanyRelationData struct {  // 查询使用此结构体,避免 指针类型取值nil的问题
	gorm.Model
	RegularCheck   int8     `json:"regular_check"`   //  0否 1是
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值