GORM的简单入门教程(三)|青训营

64 阅读2分钟

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 提供了 FirstTakeLast 方法,以便从数据库中检索单个对象。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中文文档学习。