Go语言 ORM 库 GORM 的使用指南 | 青训营

141 阅读2分钟

这是我在青训营的第六篇笔记

关于 GORM

GORM是Go语言的ORM(Object Relational Mapping)库。它为Go语言提供了简单的数据库操作方法,可以大大提高数据库操作的效率。GORM内部封装了SQL语句的生成,开发者只需要定义模型结构体和相关逻辑,就可以实现增删改查等操作。

安装

使用go get命令可以安装GORM:

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite 

建立连接

导入gorm和数据库驱动后,使用Open方法建立到数据库的连接,这里使用MySQL作为示例:


import (

"gorm.io/driver/mysql"

"gorm.io/gorm"

)

  


dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"

db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

dsn是数据源名称,包含了数据库的访问 credentials, protocol和地址信息。GORM支持MySQL、PostgreSQL、SQLite和SQL Server等数据库。

定义模型

定义对应数据库表结构的Go struct,GORM会自动将struct映射到数据库表。例如:


type User struct {

gorm.Model

Name string

Email string

}

gorm.Model包含ID、CreatedAt、UpdatedAt、DeletedAt字段,可以自动管理这些字段。

CRUD操作

GORM使得基本的CRUD(创建Create、读取Read、更新Update、删除Delete)操作变得非常简单。

创建(Create)

使用GORM插入新记录非常简单,只需要创建模型结构体实例,并使用db.Create()方法插入即可。例如:

user := User{Name:"Tom", Email:"tom@example.com"}
result := db.Create(&user) // 返回插入结果

GORM会自动生成SQL语句,将user对象插入到数据库,并返回结果。

插入时可以使用Save()方法替代Create(),区别在于Save会根据主键是否存在决定是插入还是更新。此外还可以使用CreateInBatches()等批量插入方法。

读取(Read)

GORM提供了多种查询方法:

  • First:查询首条记录
  • Take:查询限定数量记录
  • Find:按主键查询
  • Where:按条件查询

链式调用Where、Order、Limit等子句构建查询,例如:

var users []User
db.Where("name = ?", "Tom").Or("name = ?", "Sam").Order("id").Find(&users)

GORM查询出来的结果可以扫描到结构体切片中,或者使用Pluck、Count等聚合函数。

更新(Update)

更新记录使用db.Model()指定模型,where()指定条件,更新指定字段。例如:

db.Model(&user).Where("id = ?", 1).Update("name", "Thomas")

也可以调用Save()方法更新模型实例。GORM可以智能生成SQL进行更新操作。

删除(Delete)

删除记录使用db.Delete()方法,需要指定模型实例或条件进行删除。例如:

db.Delete(&user, 1) // 根据主键删除
db.Where("name = ?", "Tom").Delete(&User{}) // 条件删除

GORM会自动生成SQL进行删除操作。需要注意Delete必须传入模型实例,需要提前载入即可。