使用 GORM 连接 MySQL 并实现增删改查操作 | 豆包MarsCode AI刷题

96 阅读2分钟

1. 安装 GORM 和 MySQL 驱动

首先,你需要安装 GORM 和 MySQL 驱动。可以使用以下命令:

go get -u gorm.io/gorm 
go get -u gorm.io/driver/mysql

2. 连接 MySQL 数据库

通过 gorm.io/driver/mysql 连接 MySQL 数据库

package main

import (
   "fmt"
   "log"

   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

// 定义数据模型
type User struct {
   ID   uint   `gorm:"primaryKey"`
   Name string `gorm:"size:100"`
   Age  int
}

func main() {
   // 数据库连接信息
   dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8&parseTime=True&loc=Local"
   // 连接数据库
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if err != nil {
      log.Fatal("连接数据库失败:", err)
   }
   fmt.Println("数据库连接成功!")

   // 自动迁移,创建数据表
   db.AutoMigrate(&User{})
}
  • dsn 是 MySQL 的数据源名称(Data Source Name)。root:password 是 MySQL 的用户名和密码,tcp(127.0.0.1:3306) 是 MySQL 的连接地址,testdb 是数据库的名称。

  • 如果没有 testdb 数据库,需要手动在 MySQL 中创建。

3. 增加数据(Create)

插入数据时,使用 Create 方法:

func createUser(db *gorm.DB) {
   user := User{Name: "Alice", Age: 30}
   result := db.Create(&user)
   if result.Error != nil {
      log.Println("插入数据失败:", result.Error)
   } else {
      fmt.Println("插入数据成功:", user)
   }
}

4. 查询数据(Read)

查询数据时,可以使用 First(查询第一条记录)、Find(查询所有记录)或者 Where 方法。

  • 查询单个记录:
func getUserById(db *gorm.DB, id uint) {
   var user User
   result := db.First(&user, id)
   if result.Error != nil {
      log.Println("查询数据失败:", result.Error)
   } else {
      fmt.Println("查询结果:", user)
   }
}
  • 查询所有记录:
func getAllUsers(db *gorm.DB) {
   var users []User
   result := db.Find(&users)
   if result.Error != nil {
      log.Println("查询数据失败:", result.Error)
   } else {
      fmt.Println("所有用户:", users)
   }
}

5. 更新数据(Update)

更新操作时,可以使用 SaveUpdates 方法。Save 会将所有字段更新,而 Updates 只会更新指定字段。

  • 更新单个字段:
func updateUserAge(db *gorm.DB, id uint, newAge int) {
   var user User
   if err := db.First(&user, id).Error; err != nil {
      log.Println("查询数据失败:", err)
      return
   }
   user.Age = newAge
   result := db.Save(&user)
   if result.Error != nil {
      log.Println("更新数据失败:", result.Error)
   } else {
      fmt.Println("更新成功:", user)
   }
}
  • 更新多个字段:
func updateUserInfo(db *gorm.DB, id uint, name string, age int) {
   result := db.Model(&User{}).Where("id = ?", id).Updates(User{Name: name, Age: age})
   if result.Error != nil {
      log.Println("更新数据失败:", result.Error)
   } else {
      fmt.Println("更新成功")
   }
}

6. 删除数据(Delete)

删除数据时,可以通过 Delete 方法实现:

func deleteUser(db *gorm.DB, id uint) {
   var user User
   if err := db.First(&user, id).Error; err != nil {
      log.Println("查询数据失败:", err)
      return
   }
   result := db.Delete(&user)
   if result.Error != nil {
      log.Println("删除数据失败:", result.Error)
   } else {
      fmt.Println("删除成功")
   }
}