简介
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()
}
在上面的示例中,请将 username
、password
和 dbname
替换为您的数据库凭据和数据库名称。此外,请确保您的数据库服务器正在运行,并且 IP 地址和端口号正确。
创建模型
一旦我们连接到数据库,我们就需要创建 GORM 模型来映射数据库表。一个 GORM 模型是一个结构体类型,它应该包含以下字段:
- ID:主键字段,如果使用默认的 GORM 模型,则应该是
uint64
类型。 - CreatedAt:记录创建时间的时间戳字段。
- UpdatedAt:记录更新时间的时间戳字段。
- DeletedAt:记录删除时间的时间戳字段,用于软删除记录。
你可以任意添加其他字段,这些字段将映射到数据库表的列。
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 的用户,并将其插入到数据库中。
读取记录
使用 First
方法可以从数据库中读取单个记录,使用 Find
方法可以读取多个记录:
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
}
在上面的示例中,我们可以按 ID 查找用户并以 attrs
中提供的值更新记录。
删除记录
使用 Delete
或 Delete
方法可以删除记录:
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
}
在上面的示例中,DeleteUser
删除了表中指定 ID 的记录,SoftDeleteUser
使用软删除方式将其标记为已删除。
结论
到此,你已经可以使用 GORM 连接到数据库并进行基本的 CRUD 操作。