GO的 ORM框架 GORM 入门
创始人
2025-05-29 06:12:03

文章目录

    • 简介
    • 安装 GORM
    • 连接到数据库
    • 创建模型
    • 进行 CRUD 操作
      • 创建记录
      • 读取记录
      • 更新记录
      • 删除记录
    • 结论

简介

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      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 上添加了一个索引(索引用于软删除记录)。

进行 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).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 中提供的值更新记录。

删除记录

使用 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 操作。

相关内容

热门资讯

云龙天池国家级自然保护区入选世... 转自:云南日报记者近日从云龙天池国家级自然保护区获悉,该保护区正式入选世界自然保护联盟绿色名录,成为...
芒果干里的“暖心账”​ 我 为 群 众 办 实 事我是楚雄彝族自治州楚雄市八角镇大麦地村委会泥期苴小组的鲁晓玲。天还没亮,新...
在亲戚借条上签名被判连带清偿责...   三湘都市报12月14日讯  欠钱逾期未还,双方公堂对簿,竟因借据上的“担保人”“连带担保人”起了...
学分能换“高级工”证书?湖南暂...   毕业就能拿到“高级工”的技能证书,实现“毕业即持证”,这是种什么样的体验?近日,安徽皖江工学院土...
长赣高铁湖南段首座隧道进洞施工     12月13日,位于浏阳市荷花街道和澄潭江镇的长赣高铁湖南段首座隧道——苏家庵隧道正式进洞。 ...