使用 GORM 连接数据库并实现增删改查操作
GORM 是 Go 语言中一个强大的 ORM(Object-Relational Mapping)库,它允许我们通过面向对象的方式来操作数据库,而不需要直接写 SQL 语句。在本文中,我们将演示如何使用 GORM 来连接数据库,并实现常见的增删改查操作。是 Go 语言中最受欢迎的 ORM(Object-Relational Mapping)库之一。它提供了一种简单而强大的方式,让开发者通过面向对象的方式与数据库进行交互,而无需直接编写 SQL 语句。GORM 极大地简化了与数据库的交互,提供了一系列方便的 API 和功能,使得开发者能够更专注于业务逻辑的实现。
使用了 GORM 连接到 MySQL 数据库,并实现了增删改查操作。GORM 为我们提供了便利的 API,使得数据库操作变得简单和高效。我们可以根据需要,根据不同的数据库表和业务逻辑,扩展更多的功能和操作。
GORM 文档:gorm.io/docs/
请注意,在实际项目中,还应该添加错误处理和日志记录等功能,以保证程序的稳定性和可靠性。
安装 GORM
go get -u gorm.io/gorm
go get -u gorm.io/driver/<DATABASE_DRIVER>
go get -u gorm.io/driver/mysql
创建数据库连接
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
// 定义全局变量 db,用于存储数据库连接实例
var db *gorm.DB
func main() {
// 数据库连接参数
dsn := "user:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
// 使用 GORM 打开数据库连接
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("Failed to connect to database: %s", err)
}
// 关闭数据库连接
defer db.Close()
// 后续的增删改查操作都在这之后进行
}
通过 gorm.Open 函数打开数据库连接,然后在连接字符串中指定数据库的相关信息,例如用户名、密码、数据库地址等。defer db.Close() 用于在程序结束时关闭数据库连接。
定义模型结构体
package main
import "time"
// User 是用户模型
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"not null"`
Age int
CreatedAt time.Time
UpdatedAt time.Time
}
使用了 gorm 标签来定义模型字段的属性。primaryKey 表示该字段是主键,not null 表示该字段不允许为空。
创建数据表
main 函数中通过 AutoMigrate 方法来自动创建数据表:AutoMigrate 方法会检查数据库中是否存在 User 表,如果不存在,则会创建该表。这样,我们就准备好了数据库连接和数据表,可以进行增删改查操作了。
func main() {
// ...(前面的数据库连接部分不再重复)
// 自动创建数据表
err = db.AutoMigrate(&User{})
if err != nil {
log.Fatalf("Failed to migrate database: %s", err)
}
// 后续的增删改查操作都在这之后进行
}
实现增删改查操作
插入数据
func createUser(user *User) error {
result := db.Create(user)
return result.Error
}
查询数据
func getUserByID(id uint) (*User, error) {
var user User
result := db.First(&user, id)
return &user, result.Error
}
func getAllUsers() ([]User, error) {
var users []User
result := db.Find(&users)
return users, result.Error
}
更新数据
func updateUser(user *User) error {
result := db.Save(user)
return result.Error
}
删除数据
func deleteUserByID(id uint) error {
result := db.Delete(&User{}, id)
return result.Error
}
测试
func main() {
// ...(前面的数据库连接和自动创建数据表部分不再重复)
// 插入数据
user := &User{Name: "Alice", Age: 30}
err := createUser(user)
if err != nil {
log.Fatalf("Failed to create user: %s", err)
}
log.Printf("Created user: %v", user)
// 查询数据
retrievedUser, err := getUserByID(user.ID)
if err != nil {
log.Fatalf("Failed to get user by ID: %s", err)
}
log.Printf("Retrieved user: %v", retrievedUser)
// 更新数据
retrievedUser.Age = 31
err = updateUser(retrievedUser)
if err != nil {
log.Fatalf("Failed to update user: %s", err)
}
log.Printf("Updated user: %v", retrievedUser)
// 删除数据
err = deleteUserByID(retrievedUser.ID)
if err != nil {
log.Fatalf("Failed to delete user: %s", err)
}
log.Println("User deleted successfully")
// 后续的增删改查操作都在这之后进行
}