Gorm入门
概述
- 全功能的 ORM
- 关联(有一个、有多个、属于、多对多、多态性、单表继承)
- 挂钩(创建/保存/更新/删除/查找之前/之后)
- 急切加载
Preload,Joins - 事务、嵌套事务、保存点、RollbackTo 到保存点
- 上下文、准备语句模式、DryRun 模式
- 批量插入、FindInBatches、使用 Map 查找/创建、使用 SQL Expr 和 Context Valuer 进行 CRUD
- SQL 生成器、更新插入、锁定、优化器/索引/注释提示、命名参数、子查询
- 复合主键、索引、约束
- 自动迁移
- 记录器
- 可扩展、灵活的插件 API:Database Resolver(多个数据库、读/写拆分)/Prometheus...
- 每个功能都带有测试
- 开发者友好
安装
- 环境配置
首先,你需要安装Gorm。打开终端并输入以下命令来获取Gorm:
根据你使用的数据库类型,你需要安装相应的驱动程序。例如,如果你使用MySQL,可以安装gorm的MySQL驱动:
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
快速入门
数据模型定义
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
gorm.Model
Code string
Price uint
}
//加入了一个gorm.Model结构体,表示它是一个gorm模型,可以用于数据库操作
在Produc加入了一个gorm.Model结构体,表示它是一个gorm模型,可以用于数据库操作定义了两个字段Code string类型,Price
uint(无符号整数)类型
数据库连接和增删改查
func main () {
db, err := gorm.Open(sqlite.Open( "test.db" ), &gorm.Config{}) if err != nil { panic ( "连接数据库失败" ) }
//使用gorm的Open函数和SQLite的驱动程序打开一个名为"test.db"的数据库。如果连接失败,会抛出一个panic。
// 创建数据库Product表
db.AutoMigrate(&Product{})
// 插入一条数据
db.Create(&Product{代码: "D42" , 价格: 100 })
// 读取
var Product Product db.First(&product, 1 ) // 查找具有整数主键的产品
db.First(&product, "code = ?" , "D42" ) // 查找具有代码 D42 的产品
// 更新 - 将产品的价格更新为 200
db.Model(&product).Update( "Price" , 200 )
// 更新 - 更新多个字段
db.Model(&product).Updates(Product{Price: 200 , Code: "F42 " })
// 非零字段
db.Model(&product).Updates( map [ string ] interface {}{ "Price" : 200 , "Code" : "F42" })
// 删除 - 删除产品
db.Delete(&product, 1 )
}
要查询数据,你可以使用Gorm的查询方法。First方法可以返回符合条件的第一个记录,而Find方法可以返回符合条件的所有记录
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
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{})
}
user: 数据库用户名
password: 数据库密码
tcp(127.0.0.1:3306): 表示使用TCP连接到本地主机的3306端口,这是MySQL的默认端口
dbname: 要连接的数据库名
charset=utf8mb4: 指定字符集为UTF-8
可以修改对应参数来连接自己的数据库
此外,GORM还提供了许多方便的功能,例如链式查询、事务处理、关联查询等。它还支持多种数据库,包括MySQL、PostgreSQL、SQLite等。