什么是 GORM,为什么需要它?
GORM 是一个功能强大且流行的 Go 语言 ORM(对象关系映射)库。它为开发者提供了一种便捷的方式,通过 Go 的面向对象方法与关系型数据库(PostgreSQL、MySQL、SQLite、SQL Server 等)进行交互。
为什么需要 GORM?
- CRUD 自动化: GORM 负责编写用于创建、读取、更新和删除记录的样板 SQL 代码。
- 模式迁移: 允许根据你的 Go 结构体自动创建和更新数据库表。
- 表间关系: 简化“一对多”、“多对多”和“一对一”关系的处理。
- 安全性: 通过参数化查询内置防止 SQL 注入。
- 性能: 支持懒加载(Lazy Loading)、预加载(Eager Loading)和缓存。
- 社区: 庞大的社区,众多插件和扩展。
安装 GORM
GORM 通过 Go 包的标准方式进行安装。请确保你已安装 Go(版本 1.18+)。
go get -u gorm.io/gormgo get -u gorm.io/driver/sqlite # 用于 SQLitego get -u gorm.io/driver/mysql # 用于 MySQLgo get -u gorm.io/driver/postgres # 用于 PostgreSQLgo get -u gorm.io/driver/sqlserver # 用于 SQL Server注意: 与 Python(pip)或 Node.js(npm)不同,Go 没有统一的包管理器。命令 go get 会下载源代码并将其编译到你的项目中。
快速入门与代码示例
让我们创建一个使用 SQLite 的简单用户管理应用程序。
package main
import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm")
// User — 对应数据库表的数据模型type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"size:100;not null"` Email string `gorm:"uniqueIndex;size:255"` Age int}
func main() { // 1. 连接数据库 db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") }
// 2. 自动迁移 — 创建表 db.AutoMigrate(&User{})
// 3. 创建记录 (Create) user := User{Name: "伊万·彼得罗夫", Email: "ivan@example.com", Age: 30} result := db.Create(&user) if result.Error != nil { fmt.Println("创建错误:", result.Error) } fmt.Printf("已创建用户,ID: %d", user.ID)
// 4. 读取记录 (Read) var readUser User db.First(&readUser, user.ID) // 按主键查找 fmt.Printf("找到用户: %+v", readUser)
// 5. 更新记录 (Update) db.Model(&readUser).Update("Age", 31) fmt.Printf("更新后的年龄: %d", readUser.Age)
// 6. 删除记录 (Delete) db.Delete(&readUser) fmt.Println("用户已删除")}GORM 主要方法/函数
1. gorm.Open(dialector, config)
功能: 建立与数据库的连接。返回 *gorm.DB 实例。
参数:
dialector— 数据库驱动(例如 sqlite.Open、mysql.Open、postgres.Open)。config— GORM 配置(gorm.Config)。
示例:
db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})2. db.AutoMigrate(models ...interface{})
功能: 自动创建或更新表