日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于Go ORM框架的應用開發

本文介紹基于Go ORM框架連接和使用Lindorm寬表引擎的方法。

前提條件

操作步驟

  1. 在Go項目的go.mod文件中添加GORM相關依賴。

    require (
        gorm.io/driver/mysql v1.5.1
        gorm.io/gorm v1.25.4
    )
  2. 配置連接參數。

    dsn := "<user>:<password>@tcp(<lidnorm_mysql_url>:33060)/<database>"

    參數說明

    參數

    說明

    user

    如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統修改密碼。具體操作,請參見修改用戶密碼

    password

    lidnorm_mysql_url

    Lindorm寬表引擎的MySQL兼容地址。如何獲取,請參見查看連接地址。

    重要
    • 如果應用部署在ECS實例,建議您通過專有網絡訪問Lindorm實例,可獲得更高的安全性和更低的網絡延遲。

    • 如果應用部署在本地,在通過公網連接Lindorm實例前,需在控制臺開通公網地址。開通方式:在控制臺選擇數據庫連接 > 寬表引擎,在寬表引擎頁簽單擊開通公網地址

    • 通過專有網絡訪問Lindorm實例,lidnorm_mysql_url請填寫MySQL兼容地址對應的專有網絡地址。通過公網訪問Lindorm實例,lidnorm_mysql_url請填寫MySQL兼容地址對應的公網地址。

    database

    需要連接的數據庫名稱。默認連接default數據庫。

  3. 創建連接,通過寬表SQL語法使用Lindorm寬表引擎。以創建表為例。

    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    // 重要,Lindorm寬表引擎不支持事務,需要將事務關閉
    session := db.Session(&gorm.Session{SkipDefaultTransaction: true})
    
    //創建表Product
    err = session.Migrator().CreateTable(&Product{})
    if err != nil {
        panic(err)
    }

完整示例

完整示例代碼如下:

package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

//表映射的對象定義
type Product struct {
    //指定ID為primary key, 設置auto increment為false (Lindorm寬表引擎不支持auto increment)
    ID    int64  `gorm:"primaryKey;autoIncrement:false"`
    //String需要映射為varchar類型,否則longtext類型不支持
    Code  string `gorm:"type:varchar"`
    Price float64
}

func main() {
    //user是lindorm寬表引擎的用戶名
    //password是用戶對應的密碼
    //lidnorm_mysql_url是lindorm寬表引擎MySQL協議的接入域名
    //database是需要連接的數據庫
    dsn := "user:test@tcp(ld-uf6k8yqb741t3****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060)/default"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    // 重要,Lindorm寬表引擎不支持事務,需要將事務關閉
    session := db.Session(&gorm.Session{SkipDefaultTransaction: true})

    //建表
    err = session.Migrator().CreateTable(&Product{})
    if err != nil {
        panic(err)
    }

    //寫入數據1
    tx := session.Debug().Create(&Product{ID: 1, Code: "D42", Price: 100.1})
    err = tx.Error
    if err != nil {
        panic(err)
    }

    //寫入數據2
    tx = session.Debug().Create(&Product{ID: 2, Code: "B41", Price: 105.5})
    err = tx.Error
    if err != nil {
        panic(err)
    }

    var product1 Product
    //查詢數據1
    session.Debug().First(&product1, 1) // 根據整型主鍵查找
    fmt.Println(product1)

    var product2 Product
    //查詢數據2
    session.Debug().First(&product2, "code = ?", "B41") // 查找 code 字段值為 D42 的記錄
    fmt.Println(product2)


    //更新數據,將id為1的記錄的price更新為101.8
    session.Debug().Model(&Product{}).Where("id = ?", 1).Update("price", 101.8)
    product1 = Product{}
    
    //查詢數據1
    session.Debug().First(&product1, 1)
    fmt.Println(product1)

    // Delete - 刪除 product1
    session.Delete(&Product{}, 1)
    product1 = Product{}
    session.Debug().First(&product1, 1)
    fmt.Println(product1)
}

上述代碼執行后將返回執行日志,日志中包含查詢結果。查詢結果如下:

{1 D42 100.1}
{2 B41 105.5}
{1 D42 101.8}
{0  0}