GORM 是 Go 语言中的一个 ORM 库,能够更方便地操作数据库。以下是关于如何使用 GORM 连接数据库,并实现常见的增、删、改、查操作的学习。
1. 安装 GORM
通过 go get 命令安装:
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite # 示例使用 SQLite 数据库,选择适合的数据库驱动
这里使用的是 SQLite 数据库驱动,可以替换成对应的数据库驱动。
2. 创建 Go 文件和数据库连接
创建一个 Go 文件,然后通过 GORM 连接到数据库:
package main
import (
"fmt"
"log"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// 定义模型
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:255"`
Email string `gorm:"size:255;unique"`
Age int
}
func main() {
// 连接到数据库(使用 SQLite)
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect to database:", err)
}
// 自动迁移,创建表
err = db.AutoMigrate(&User{})
if err != nil {
log.Fatal("failed to migrate database:", err)
}
// 进行增删改查操作
performCRUDOperations(db)
}
首先定义了一个 User 模型,包含 ID、Name、Email 和 Age 字段。然后通过 gorm.Open 方法连接到 SQLite 数据库,使用 AutoMigrate 自动创建和迁移数据库表。
3. 实现增、删、改、查操作
3.1 创建(Create)
func createUser(db *gorm.DB) {
// 创建新的用户
user := User{Name: "John Doe", Email: "john.doe@example.com", Age: 30}
result := db.Create(&user)
if result.Error != nil {
log.Fatal("failed to create user:", result.Error)
}
fmt.Println("User created:", user)
}
此函数创建了一个新的 User 实例,并通过 db.Create 方法将其插入到数据库。
3.2 读取(Read)
func getUser(db *gorm.DB) {
var user User
// 查找用户(按 ID 查找)
result := db.First(&user, 1) // 查找 ID 为 1 的用户
if result.Error != nil {
log.Fatal("failed to find user:", result.Error)
}
fmt.Println("User found:", user)
}
这里使用 db.First 来查找第一个符合条件的记录。也可以使用 db.Where 来执行更复杂的查询。
3.3 更新(Update)
func updateUser(db *gorm.DB) {
var user User
// 查找用户
if err := db.First(&user, 1).Error; err != nil {
log.Fatal("failed to find user:", err)
}
// 更新用户信息
user.Age = 35
result := db.Save(&user)
if result.Error != nil {
log.Fatal("failed to update user:", result.Error)
}
fmt.Println("User updated:", user)
}
首先查找用户,然后修改其年龄字段,最后通过 db.Save 方法更新记录。
3.4 删除(Delete)
func deleteUser(db *gorm.DB) {
var user User
// 查找用户
if err := db.First(&user, 1).Error; err != nil {
log.Fatal("failed to find user:", err)
}
// 删除用户
result := db.Delete(&user)
if result.Error != nil {
log.Fatal("failed to delete user:", result.Error)
}
fmt.Println("User deleted:", user)
}
使用 db.Delete 删除查询到的 user。
4. 完整的增删改查函数
最后,我们将增、删、改、查操作组织成一个完整的函数,方便调用。
func performCRUDOperations(db *gorm.DB) {
// 创建用户
createUser(db)
// 获取用户
getUser(db)
// 更新用户
updateUser(db)
// 删除用户
deleteUser(db)
}
5. 运行程序
完成后,通过以下命令运行程序:
go run main.go
6. GORM 常用功能
除了基本的 CRUD 操作,GORM 还提供了很多强大的功能,包括:
- 关联查询(Associations) : 支持一对一、一对多、多对多关系。
- 预加载(Preloading) : 自动加载相关联的表数据。
- 事务(Transactions) : 支持事务操作。
- 数据库迁移(Migrations) : 支持数据库表的自动迁移与管理。