简介
这部分说了连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) // 删除这条数据
此例子有如下关系,1代表has one,多代表has many
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNx3PHIe-1659751035052)(../../my_images/image-20220805090129800.png)]](https://1000bd.com/contentImg/2022/08/11/074249878.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oa1lsZCQ-1659751035054)(../../my_images/image-20220805090448341.png)]](https://1000bd.com/contentImg/2022/08/11/074250196.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nMAyZfD-1659751035055)(../../my_images/image-20220805092711112.png)]](https://1000bd.com/contentImg/2022/08/11/074250525.png)
polymorphic——多态
Association——关联,langAssociation := db.Model(&user).Association(“Languages”)意思是user是主表,去查Languages表,Languages作为关联表
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxiMyqYK-1659751035056)(../../my_images/image-20220805093752897.png)]](https://1000bd.com/contentImg/2022/08/11/074250709.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)]](https://1000bd.com/contentImg/2022/08/11/074250878.png)
在执行crud前或后的一些操作
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WhfEZY1k-1659751035058)(../../my_images/image-20220806084729870.png)]](https://1000bd.com/contentImg/2022/08/11/074251206.png)
- Raw(中写sql原生sql语句)
- .Row()我不太理解,就暂时不说了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0ghBOkH-1659751035059)(../../my_images/image-20220806092756284.png)]](https://1000bd.com/contentImg/2022/08/11/074251378.png)
tx.Create(…) // 在事务中执行一些数据库操作(使用’tx’,而不是’db’)
tx.Rollback() // 发生错误时回滚事务
事务可以在发生错误的时候回滚