# 数据库入门go语言笔记(五) | 青训营

58 阅读4分钟

项目介绍

  • 使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作.

实现方法

(1)导入外部库

导入了 github.com/jinzhu/gormgithub.com/jinzhu/gorm/dialects/mysql 这两个库,以便可以使用 GORM 库来进行与 MySQL 数据库的交互。- github.com/jinzhu/gorm表示GORM ORM(对象关系映射)库的主要包,它提供了操作数据库的功能。github.com/jinzhu/gorm/dialects/mysql表示 GORM 库中用于支持 MySQL 数据库的包。

import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

(2)定义用户属性结构体

gorm.Model表示 GORM 提供的一个内置模型,它包含了常见的数据库表字段,如 IDCreatedAtUpdatedAtDeletedAt。这些字段将会在数据库表中自动生成,并用于管理记录的创建时间、更新时间以及软删除等操作。 Name string表示用户的姓名。这个字段是一个字符串类型。Email string表示用户的电子邮箱。同样,它也是一个字符串类型。Age int表示用户的年龄。这个字段是一个整数类型。

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

(3)连接数据库

  • 第一行代码表示打开数据库,通过 GORM 库的 Open 函数来连接到 MySQL 数据库。其中,第一个参数是数据库类型(这里是 "mysql"),第二个参数是连接字符串。
  • defer db.Close()表示在程序结束之前,使用 defer 关键字延迟关闭数据库连接。这样可以确保程序运行结束后会关闭数据库连接,避免资源泄露。
  • db.AutoMigrate(&User{})表示这一行代码使用 GORM 的 AutoMigrate 函数来自动创建与 User 模型对应的数据库表。如果表不存在,它会根据 User 结构体的定义自动生成表结构。
db, err := gorm.Open("mysql", "root:1999@tcp(127.0.0.1:3306)/mysql?charset=utf8&parseTime=True&loc=Local")
if err != nil {
    panic("无法连接数据库")
}
defer db.Close()
db.AutoMigrate(&User{})

(4)操作数据库

对数据库执行了创建、查询、更新和删除用户的操作。

// 创建多个记录
users := []User{
    {Name: "Zhangsan", Email: "zhangsan@example.com", Age: 30},
    {Name: "Lisi", Email: "lisi@example.com", Age: 38},
    {Name: "Wangwu", Email: "wangwu@example.com", Age: 32},
}
for _, user := range users {
    db.Create(&user)
    fmt.Printf("Created user: %v\n", user)
}
// 查询记录
var foundUser User
db.First(&foundUser, "name = ?", "Zhangsan")
fmt.Printf("Found user: %v\n", foundUser)
// 更新记录
db.Model(&foundUser).Update("Name", "Zhangdasan")
fmt.Printf("Updated user: %v\n", foundUser)
// 删除记录
db.Delete(&foundUser)
fmt.Printf("Deleted user: %v\n", foundUser)

(5)显示表中信息

将输出数据库表中所有用户记录的信息,包括姓名、邮箱、年龄以及通过 GORM 自动生成的时间戳信息(创建时间、更新时间等)。每个用户记录都会在终端上打印出来。

// 输出表信息
var usersList []User
db.Find(&usersList)
fmt.Println("All users:")
for _, u := range usersList {
    fmt.Printf("%v\n", u)
}

5.png

总结

在上面这个数据库项目中,我学习到了一下go语言的知识点:

  1. 包引入和使用:
  • 使用 import 关键字引入外部的库,如 GORM 库。
  • 使用 . 句点操作符来引入包,以便在代码中可以直接使用库中的函数和方法,而无需前缀。
  1. 结构体定义:
  • 定义了一个名为 User 的结构体类型,用于表示用户记录的数据结构。
  • 使用了 GORM 提供的 gorm.Model 结构体,内嵌了常见的数据库字段,如 ID、创建时间、更新时间等。
  1. 数据库连接和操作:
  • 使用 GORM 的 Open 函数连接到 MySQL 数据库。
  • 使用 AutoMigrate 函数自动迁移数据库表结构,确保数据库中有与模型相对应的表。
  1. 创建、查询、更新和删除数据:
  • 使用 Create 函数在数据库中创建记录。
  • 使用 First 函数查询数据库中的记录。
  • 使用 ModelUpdate 函数更新数据库中的记录。
  • 使用 Delete 函数删除数据库中的记录。
  1. 切片和循环:
  • 创建了一个包含多个用户信息的切片 users,使用循环遍历该切片进行批量操作。
  1. 格式化输出:
  • 使用 fmt.Printf 函数来格式化输出信息到终端,以展示各种操作的结果。
  1. 错误处理:
  • Open 函数调用中,使用 err 变量来捕获可能的错误。
  • 使用 panic 函数在连接数据库失败时抛出异常。
  1. 延迟执行和资源管理:
  • 使用 defer 关键字来延迟关闭数据库连接,确保程序结束时关闭连接。
  • 使用 defer 关键字来延迟执行 db.Delete(&User{}),清空表数据。