这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
GORM介绍
-
Gorm 是 Go 语言中实现对象和数据库映射的框架(orm)
Object Relational Mapping。 -
orm的主要用途是把struct类型和数据库表进行映射,这样就可以像操作对象一样操作数据库。
-
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
GORM特点
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
初始化
基础CRUD
type Product struct {
gorm.Model
Code string
Price uint
}
1. 增/创建(Create)
db.Create(&model.Product{Code: "DS42", Price: 600})
2. 查/读取(Read)
var p model.Product
db.First(&p, 1)
fmt.Println(p.Code)
3. 改/更新(Update)
db.First(&p, 1)
p.Code = "BT7274"
p.Price = 100
db.Save(&p)
4. 删/删除(Delete)
db.Delete(&p, 2)
GORM模型定义
约定
GORM 倾向于约定优于配置 默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
- 蛇形复数举例
- User => users 首字母小写,复数
- UserInfo => user_infos
- DBUserInfo => db_user_infos
- DBXXXXUserInfo => dbxxxx_user_infos
gorm.Model
GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt
该结构体定义如下
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"` }
笔记内容
这是第一篇学习笔记创作,介绍了GORM的特点,同时记录了GORM的 简单CRUD操作方法 和 模型定义基础知识