本文介紹基于Go ORM框架連接和使用Lindorm寬表引擎的方法。
前提條件
已安裝GO環境,建議安裝Go 1.17及以上版本。如何安裝,請參見Go。
已開通MySQL協議兼容功能。如何開通,請參見開通MySQL協議兼容功能。
已將客戶端IP添加至白名單,具體操作請參見設置白名單。
操作步驟
在Go項目的go.mod文件中添加GORM相關依賴。
require ( gorm.io/driver/mysql v1.5.1 gorm.io/gorm v1.25.4 )
配置連接參數。
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數據庫。
創建連接,通過寬表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}
文檔內容是否對您有幫助?