• 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) // 删除这条数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    ▸ 关联处理

    关联-定义-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() // 发生错误时回滚事务

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

  • 相关阅读:
    Understanding the Security of ARM Debugging Features【TEE安全】
    K8s Docker实践二
    Jmeter——BeanShell 内置变量vars、props、prev的使用
    MR756-ASEMI汽车用整流二极管MR756
    分闸合闸电源监视继电器JZZS-1120/DC220V
    MySQL数据库之MHA高可用
    10个艰难的Java面试题与答案
    NoSQL--3.MongoDB配置(Linux版)
    【过程记录】通过ssh上传Github仓库
    Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖
  • 原文地址:https://blog.csdn.net/EGXXM/article/details/126190037