gorm crud总结

type Student struct {
	Id   int64  `gorm:"primary_key"`
	Name string `gorm:"column:name"`
	Age  int    `gorm:"column:age"`
}

func (Student) TableName() string {
	return "student"
}

插入

s := Student{Name: "abc", Age: 17,}
err = db.Model(&Student{}).Create(&s).Error

更新

# 更新单列
err = db.Model(&Student{}).Where("id = ?", 4).UpdateColumn("age", 0).Error
# 不同于Updates方法,Save方法支持全字段更新,即使字段值是零值
s := Student{Id: 1, Name: "abc", Age: 17,}
s.Age = 0
err = db.Save(&s).Error

删除

# 根据主键删除
s := Student{Id: 1, Name: "abc", Age: 17,}
err = db.Delete(&s).Error
# 根据非主键条件删除
err = db.Delete(&Student{}, "name = ?", "abc").Error
# 删除单张表所有记录
err = db.Exec(fmt.Sprintf("delete from %s", tableName)).Error

查询

# 查询单条记录
var s1 Student
err = db.Model(&Student{}).Where("id = ?", 2).First(&s1).Error
# 查询多条记录
var s1 []Student
err = db.Model(&Student{}).Find(&s1).Error
# 查询某列
var age int
err = db.Model(&Student{}).Select("age").Where("id = ?", 2).Scan(&age).Error
# 计数
var count int64
err = db.Model(&Student{}).Count(&count).Error

特殊场景
使用First、Last 2种查询方法之一,如果查询结果为空,那么不管是否使用切片接收,都会报错gorm.ErrRecordNotFound。
使用Find、Scan 2种查询方法之一,如果查询结果为空,接收结果类型是切片,那么不会报错gorm.ErrRecordNotFound,需要判断切片长度是否为0。

posted on 2024-12-31 21:52  王景迁  阅读(23)  评论(0)    收藏  举报

导航