GORM夜谈

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNx3PHIe-1659751035052)(../../my_images/image-20220805090129800.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oa1lsZCQ-1659751035054)(../../my_images/image-20220805090448341.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nMAyZfD-1659751035055)(../../my_images/image-20220805092711112.png)]

polymorphic——多态

Association——关联,langAssociation := db.Model(&user).Association(“Languages”)意思是user是主表,去查Languages表,Languages作为关联表


▸ Preload/事务/复合主键/SQL Builder…
Preload / Joins 预加载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxiMyqYK-1659751035056)(../../my_images/image-20220805093752897.png)]

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 钩 ⼦(创建,更新,删除,查找)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H7k1mQt8-1659751035057)(../../my_images/image-20220805214422175.png)]

在执行crud前或后的一些操作

SQL/DATABASE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WhfEZY1k-1659751035058)(../../my_images/image-20220806084729870.png)]

  • Raw(中写sql原生sql语句)
  • .Row()我不太理解,就暂时不说了
事务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0ghBOkH-1659751035059)(../../my_images/image-20220806092756284.png)]

tx.Create(…) // 在事务中执行一些数据库操作(使用’tx’,而不是’db’)

tx.Rollback() // 发生错误时回滚事务

事务可以在发生错误的时候回滚

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值