GO的 ORM框架 GORM 入门

简介

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 替换为您的数据库凭据和数据库名称。此外,请确保您的数据库服务器正在运行,并且 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 中提供的值更新记录。

删除记录

使用 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
}

在上面的示例中,DeleteUser删除了表中指定 ID 的记录,SoftDeleteUser使用软删除方式将其标记为已删除。

结论

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值