GORM夜谈
简介
- 作者:Jinzhu / 张⾦柱
- ▸ Github:github.com/jinzhu/gorm
▸ GORM 官⽹: https://gorm.io - 此书(?)共40页,预计阅读时间,4天,本周六完成
- 此文主要是对此书的翻译,某些晦涩难懂,或者少见的部分会重点标出并解释,常见部分将不会过多说,所以适合有一定gorm和sql基础的同学。
- (对某些不重要部分或者不常用或者不懂的地方将不会解释,水平受限啊,主要是前12页,后边几乎都看不懂…)
- 阿里云-分享如下
- 「GORM+夜读.pdf」https://www.aliyundrive.com/s/yRF7gLankfK 提取码: pb58 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
▸基本介绍部分
▸ 链式API
这部分说了连CRUD——连接数据库,增,查,改,删
// 连——数据库连接
db, err := gorm.Open("sqlite3","test.db") // gorm v1版本
// C——创建一个数据库表,对应官方文档的——迁移
db.AutoMigrate(&Product{})
// C——创建一条数据
db.Create(&Product{Code:"L1212",Price: 1000})
// R——单个查询(读取)
var product Product
db.First(&product,1) // 查询id = 1的product
db.First(&product, "code = ?","L1212") // 查询 code = L1212的product
// R——多个查询
var product []Products //做一个切片把查询到的放进去
db.Find(&product, "code = ?","L1212") // 查询 code = L1212的所有products
// U——更新
db.Model(&product).Update("Price",2000) //Model意为找到这个结构体对用的表,可以用table替换
db.Updates(&product) // 更新非零字段
db.Select("*").Updates(&product) // 更新全部字段
db.Select("Code", "Price").Updates(&product) // 更新这两个字段
db.Omit("Code").Updates(&product) // 更新除了Code外的所有非零字段
db.Select("*").Omit("Code").Updates(&product) // 更新除了Code外的所有字段
// D——删除
db.Delete(&product) // 删除这条数据
▸ 关联处理
关联-定义-CRUD
此例子有如下关系,1代表has one,多代表has many
polymorphic——多态
Association——关联,langAssociation := db.Model(&user).Association(“Languages”)意思是user是主表,去查Languages表,Languages作为关联表
▸ Preload/事务/复合主键/SQL Builder…
Preload / Joins 预加载
Order——订单(在这里确实是订单的意思,但是Order还有别的意思,在gorm中有个.Order(),是排序的意思。详见:https://gorm.io/zh_CN/docs/query.html#%E6%9D%A1%E4%BB%B6)
Order的State字段应该是有cancelled(取消 )这个属性的,但是如图如示,并没有给太多的解释,倒是也不妨碍阅读理解
“state NOT IN(?)”, "cancelled”——指的是,订单状态不包含取消的,
关于CreditCard和Profile(如图是个结构体),给的信息太少,不做解释了
钩⼦
GORM 钩 ⼦(创建,更新,删除,查找)
在执行crud前或后的一些操作
SQL/DATABASE
- Raw(中写sql原生sql语句)
- .Row()我不太理解,就暂时不说了
事务
tx.Create(…) // 在事务中执行一些数据库操作(使用’tx’,而不是’db’)
tx.Rollback() // 发生错误时回滚事务
事务可以在发生错误的时候回滚