GORM基础学习 | 青训营笔记

99 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

GORM介绍

  1. Gorm 是 Go 语言中实现对象和数据库映射的框架(orm)Object Relational Mapping

  2. orm的主要用途是把struct类型数据库表进行映射,这样就可以像操作对象一样操作数据库。

  3. GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server

GORM特点

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,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 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间

  • 蛇形复数举例
    • User => users 首字母小写,复数
    • UserInfo => user_infos
    • DBUserInfo => db_user_infos
    • DBXXXXUserInfo => dbxxxx_user_infos

gorm.Model

GORM 定义一个 gorm.Model 结构体,其包括字段 IDCreatedAtUpdatedAtDeletedAt

该结构体定义如下

 
type Model struct {   
    ID        uint           `gorm:"primaryKey"`   
    CreatedAt time.Time   
    UpdatedAt time.Time   
    DeletedAt gorm.DeletedAt `gorm:"index"` }

笔记内容

这是第一篇学习笔记创作,介绍了GORM的特点,同时记录了GORM的 简单CRUD操作方法模型定义基础知识