GORM 的简单使用
本文将带着样例数据库写一篇使用GORM的简单增删改查功能。
- 数据的增加(插入)
我们直接以学生为例,学生在注册好之后需要将数据放入数据库中,所以我们在 data access object 层中(也可以叫其他层)中进行 GORM 的插入操作。
创建记录并更新给出的字段。
func InsertStu(user model.Student) error {
deres := db.Select("Name", "Password", "MajorNum").Create(&model.Student{Name: user.Name, Password: user.Password, MajorNum: user.MajorNum})
err := deres.Error
if err != nil {
fmt.Printf("insert failed, err:%v\n", err)
return err
}
return err
}
注:model.Student 为学生的相关模型,模型的建立依照上面的数据库建立规范实现,但是 GORM 本身会有非常多的配置,所以在编写模型层的时候要注意 gorm 标签的使用。
- 数据的删除
使用gorm删除一条记录时,删除对象需要指定主键,否则会触发 批量 Delete。
下面的例子是删除老师的课程。
func DeleteTCourse(id int) error {
var Course []model.TCourse
dbRes := db.Where("Id = ?", id).Delete(&Course)
err := dbRes.Error
if err != nil {
fmt.Printf("delete failed, err:%v\n", err)
return err
}
return err
}
- 数据的更改
当使用 Update 更新单个列时,需要指定条件,否则会返回 ErrMissingWhereClause 错误。
下面的例子是更改学生的密码。
func UpdateStuPassword(id int, newPassword string) error {
deRes := db.Model(&model.Student{}).Where("Id = ?", id).Update("Password", newPassword)
err := deRes.Error
if err != nil {
fmt.Printf("update failed, err:%v\n", err)
return err
}
return err
}
- 数据的查询
GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。First 和 Last 会根据主键排序,分别查询第一条和最后一条记录。 只有在目标 struct 是指针或者通过 db.Model() 指定 model 时,该方法才有效。 此外,如果相关 model 没有定义主键,那么将按 model 的第一个字段进行排序。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误。因此,我们为了避免ErrRecordNotFound错误,推荐使用Find,比如db.Limit(1).Find(&user),Find方法可以接受struct和slice的数据。
下面的例子是通过学生的 ID 查询密保的问题。
func SelectQuestionByStuId(id int) string {
user := model.Student{}
db.Model(&model.Student{}).Select("question").Where("Id = ?", id).Find(&user)
return user.Question
}
总结
以上则是gorm的简单使用,若需要更详细的内容可以去gorm中文文档学习。