项目介绍
- 使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作.
实现方法
(1)导入外部库
导入了 github.com/jinzhu/gorm 和 github.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 提供的一个内置模型,它包含了常见的数据库表字段,如 ID、CreatedAt、UpdatedAt 和 DeletedAt。这些字段将会在数据库表中自动生成,并用于管理记录的创建时间、更新时间以及软删除等操作。 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)
}
总结
在上面这个数据库项目中,我学习到了一下go语言的知识点:
- 包引入和使用:
- 使用
import关键字引入外部的库,如 GORM 库。 - 使用
.句点操作符来引入包,以便在代码中可以直接使用库中的函数和方法,而无需前缀。
- 结构体定义:
- 定义了一个名为
User的结构体类型,用于表示用户记录的数据结构。 - 使用了 GORM 提供的
gorm.Model结构体,内嵌了常见的数据库字段,如 ID、创建时间、更新时间等。
- 数据库连接和操作:
- 使用 GORM 的
Open函数连接到 MySQL 数据库。 - 使用
AutoMigrate函数自动迁移数据库表结构,确保数据库中有与模型相对应的表。
- 创建、查询、更新和删除数据:
- 使用
Create函数在数据库中创建记录。 - 使用
First函数查询数据库中的记录。 - 使用
Model和Update函数更新数据库中的记录。 - 使用
Delete函数删除数据库中的记录。
- 切片和循环:
- 创建了一个包含多个用户信息的切片
users,使用循环遍历该切片进行批量操作。
- 格式化输出:
- 使用
fmt.Printf函数来格式化输出信息到终端,以展示各种操作的结果。
- 错误处理:
- 在
Open函数调用中,使用err变量来捕获可能的错误。 - 使用
panic函数在连接数据库失败时抛出异常。
- 延迟执行和资源管理:
- 使用
defer关键字来延迟关闭数据库连接,确保程序结束时关闭连接。 - 使用
defer关键字来延迟执行db.Delete(&User{}),清空表数据。