使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作实战 | 青训营

98 阅读3分钟

GORM是一个Go语言编写的ORM库,它简化了连接数据库的过程,并提供了丰富的API以帮助开发人员进行CRUD(增删改查)操作。

在开始使用GORM前,首先需要在Go代码中添加GORM的引用。 可以使用如下命令进行下载:

go get -u gorm.io/gorm

在编写代码之前,需要先定义一个数据库模型以映射到数据库表。如下定义了一个User模型:

type User struct {
    gorm.Model
    Name string
    Email string
    Age int
}

一个模型通常是一个结构体,字段对应数据库表中的列。在上述例子中,该User结构体是嵌套了一个gorm.Model的,并自带创建时间、更新时间等常用数据库列。gorm.Model是一个内置的基础模型,它提供了一些基本的数据库列(例如ID、CreatedAt、UpdatedAt等)。

接下来就是连接数据库,GORM支持多种类型的连接(如MySQL、PostgreSQL等)。连接数据库需要先定义数据库连接参数, 可以使用如下代码:

import "gorm.io/driver/mysql"

dsn := "username:password@tcp(hostname:port)/database?charset=utf8mb4&parseTime=True"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

其中dsn是构建连接池的关键参数。在dsn 中,需要指定用户名和密码、数据库主机名(或IP地址)、数据库端口和要连接到的数据库名称。设置 "charset=utf8mb4、parseTime=True" 可以将字符集设置为utf8mb4,并且可以扫描时间戳类型的数据库列。

它还必须通过参数&gorm.Config{}传递给连接。在初始化GORM之后,GORM已经可以连接到指定的数据库中。

一个简单的增删改查程序如下:

func main() {
  // 连接数据库
  dsn := "username:password@tcp(hostname:port)/database_name?charset=utf8mb4&parseTime=True"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }
  defer func() {
    sqlDB, err := db.DB()
    if err != nil {
      panic(err)
    }
    sqlDB.Close()
  }()
  // 自动迁移
  err = db.AutoMigrate(&User{})
  if err != nil {
    panic(err)
  }

  // 添加用户
  user := User{Name: "Tom", Email: "tom@example.com", Age: 20}
  result := db.Create(&user)
  if result.Error != nil {
    panic(result.Error)
  }
 fmt.Println(user.ID)

  // 根据ID查询用户
  var u User
  result = db.First(&u, user.ID)
  if result.Error != nil {
    panic(result.Error)
  }
  fmt.Println(u.Name, u)

  // 更新用户信息
  result = db.Model(&u).Update("age", 25)
  if result.Error != nil {
    panic(result.Error)
  }
  fmt.Println(u.Age)

  // 删除用户
  result = db.Delete(&u)
  if.Error != nil {
    panic(result.Error)
  }
}

该程序包括连接数据库,添加新的用户到数据库,查询指定ID的用户,更新用户的年龄和删除用户。例如:

  • 创建用户:user := User{Name: "Tom", Email: "tom@example.com", Age: 20} db.Create(&user)
  • 查询用户:var user User db.First(&user, 1) // 查询ID为1的
  • 更新用户:db.Model(&user).Update("Age", 25)
  • 删除用户:db.Delete(&user)

在GORM中,许多常见的数据库操作都是使用链式结构的调用。例如,在查询中使用“First”或“Find”方法,将条件链装在“Where”之后,并使用“Update”或“Delete”方法更新或删除记录。

总的来说,连接和管理数据库流程非常简单,同时提供了许多方便的API,可以帮助您轻松地执行各种操作。使用GORM的优点之一是只依赖于少量的配置,可以让开发人员专注于程序的逻辑和业务。