GORM 是一种流行的 Go 语言 ORM(对象关系映射)库,可以将结构体映射到数据库。它提供了一个简单易用的 API,可以无缝地连接并操作多种数据库,如 MySQL、PostgreSQL、SQLite 和 SQL Server。
在这篇文章中,我将简要介绍如何使用 GORM 连接到数据库并进行基本的 CRUD(增加,读取,更新,删除)操作。
在开始使用 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 模型是一个结构体类型,它应该包含以下字段:
uint64 类型。你可以任意添加其他字段,这些字段将映射到数据库表的列。
type User struct {ID uint64 `gorm:"primaryKey"`Name stringEmail stringCreatedAt time.TimeUpdatedAt time.TimeDeletedAt gorm.DeletedAt `gorm:"index"`
}
在上面的示例中,我们定义了一个 User 模型,它将映射到名为 users 的数据库表。它包含 ID、Name、Email、CreatedAt、UpdatedAt 和 DeletedAt 六个字段,其中 ID 是主键,Name 和 Email 将映射到表中的两个列。CreatedAt、UpdatedAt 和 DeletedAt 将映射到三个时间戳列,并在 DeletedAt 上添加了一个索引(索引用于软删除记录)。
一旦我们创建了模型,我们就可以使用 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).Errorreturn user, err
}func GetUsers(db *gorm.DB) ([]User, error) {var users []Usererr := db.Find(&users).Errorreturn 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 操作。
下一篇:角逐“新赛道”不能“雾里看花”