简介

GORM 是一种流行的 Go 语言 ORM(对象关系映射)库,可以将结构体映射到数据库。它提供了一个简单易用的 API,可以无缝地连接并操作多种数据库,如 MySQL、PostgreSQL、SQLite 和 SQL Server。

在这篇文章中,我将简要介绍如何使用 GORM 连接到数据库并进行基本的 CRUD(增加,读取,更新,删除)操作。

安装 GORM

在开始使用 GORM 之前,我们需要先安装它。可以使用 Go 包管理器 go get 命令来安装 GORM:

go get -u gorm.io/gorm

同时也要安装数据库驱动,比如 MySQL 驱动:

go get -u gorm.io/driver/mysql

连接到数据库

首先,我们需要创建一个 GORM 实例并连接到数据库。请注意,在连接之前,我们需要确保数据库已经创建好了,并且我们有操作权限。

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

func main() {
    // 连接数据库
    dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    defer db.Close()
}
usernamepassworddbname

创建模型

一旦我们连接到数据库,我们就需要创建 GORM 模型来映射数据库表。一个 GORM 模型是一个结构体类型,它应该包含以下字段:

uint64

你可以任意添加其他字段,这些字段将映射到数据库表的列。

type User struct {
	ID        uint64 `gorm:"primaryKey"`
	Name      string
	Email     string
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt gorm.DeletedAt `gorm:"index"`
}

在上面的示例中,我们定义了一个 User 模型,它将映射到名为 users 的数据库表。它包含 ID、Name、Email、CreatedAt、UpdatedAt 和 DeletedAt 六个字段,其中 ID 是主键,Name 和 Email 将映射到表中的两个列。CreatedAt、UpdatedAt 和 DeletedAt 将映射到三个时间戳列,并在 DeletedAt 上添加了一个索引(索引用于软删除记录)。

进行 CRUD 操作

一旦我们创建了模型,我们就可以使用 GORM 进行基本的 CRUD 操作。

创建记录

Create
func CreateUser(db *gorm.DB) error {
	user := &User{Name: "alice", Email: "alice@example.com"}
	return db.Create(user).Error
}

在上面的示例中,我们创建了一个名为 Alice 的用户,并将其插入到数据库中。

读取记录

FirstFind
func GetUser(db *gorm.DB, id uint64) (*User, error) {
	user := &User{}
	err := db.First(user, id).Error
	return user, err
}

func GetUsers(db *gorm.DB) ([]User, error) {
	var users []User
	err := db.Find(&users).Error
	return users, err
}

在上面的示例中,我们可以通过 ID 读取单个记录并读取全部用户。

更新记录

Updates
func UpdateUser(db *gorm.DB, id uint64, attrs map[string]interface{}) error {
	return db.Model(&User{}).Where("id = ?", id).Updates(attrs).Error
}
attrs

删除记录

DeleteDelete
func DeleteUser(db *gorm.DB, id uint64) error {
	return db.Delete(&User{}, id).Error
}

func SoftDeleteUser(db *gorm.DB, id uint64) error {
	return db.Model(&User{}).Where("id = ?", id).Update("deleted_at", time.Now()).Error
}
DeleteUserSoftDeleteUser

结论

到此,你已经可以使用 GORM 连接到数据库并进行基本的 CRUD 操作。