Go語(yǔ)言之ORM(對(duì)象關(guān)系映射)庫(kù)詳解
github.com/jinzhu/gorm
是 Go 語(yǔ)言中一個(gè)非常流行的 ORM(對(duì)象關(guān)系映射)庫(kù),用于簡(jiǎn)化與關(guān)系型數(shù)據(jù)庫(kù)的交互。
以下是關(guān)于它的關(guān)鍵信息:
核心特點(diǎn)
全功能 ORM
- 支持主流數(shù)據(jù)庫(kù):MySQL、PostgreSQL、SQLite、SQL Server 等。
- 通過(guò)結(jié)構(gòu)體(Struct)映射數(shù)據(jù)庫(kù)表,自動(dòng)處理數(shù)據(jù)類型轉(zhuǎn)換。
鏈?zhǔn)?API
提供流暢的鏈?zhǔn)秸{(diào)用方法,例如:
db.Where("name = ?", "jinzhu").First(&user)
自動(dòng)遷移
可根據(jù)模型自動(dòng)創(chuàng)建或更新數(shù)據(jù)庫(kù)表結(jié)構(gòu):
db.AutoMigrate(&User{})
關(guān)聯(lián)支持
簡(jiǎn)化一對(duì)多、多對(duì)多等關(guān)聯(lián)關(guān)系操作:
type User struct { gorm.Model CreditCards []CreditCard // 一對(duì)多 }
事務(wù)與鉤子
- 支持?jǐn)?shù)據(jù)庫(kù)事務(wù)。
- 提供
BeforeSave
、AfterCreate
等生命周期鉤子。
查詢構(gòu)建器
- 支持復(fù)雜查詢、預(yù)加載(Preload)、原生 SQL 等。
狀態(tài)與替代方案
原倉(cāng)庫(kù)已歸檔:原作者 Jinzhu 已停止維護(hù) gorm
(v1 版本),并推薦使用新版 gorm.io/gorm(即 GORM v2)。
GORM v2 改進(jìn):
- 性能優(yōu)化。
- 支持上下文(Context)。
- 更清晰的 API 設(shè)計(jì)。
基本使用示例
package main import ( "gorm.io/gorm" "gorm.io/driver/sqlite" ) type User struct { gorm.Model Name string Age int } func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("連接數(shù)據(jù)庫(kù)失敗") } // 自動(dòng)遷移 db.AutoMigrate(&User{}) // 創(chuàng)建記錄 db.Create(&User{Name: "Alice", Age: 30}) // 查詢 var user User db.First(&user, "name = ?", "Alice") }
何時(shí)選擇 GORM?
- 適合:需要快速開(kāi)發(fā)、避免手寫(xiě) SQL 的場(chǎng)景。
- 不適合:對(duì)性能極致要求或需高度定制化 SQL 的情況(可搭配原生
database/sql
使用)。
總結(jié)
- 如果你是新項(xiàng)目,建議直接使用 GORM v2。
- 學(xué)習(xí)資源:官方文檔(含中文)詳細(xì),社區(qū)活躍,適合快速上手 ORM 開(kāi)發(fā)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
go語(yǔ)言yaml轉(zhuǎn)map、map遍歷的實(shí)現(xiàn)
本文主要介紹了go語(yǔ)言yaml轉(zhuǎn)map、map遍歷的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Go|使用Options模式和建造者模式創(chuàng)建對(duì)象實(shí)戰(zhàn)
這篇文章主要介紹了Go使用Options模式和建造者模式創(chuàng)建對(duì)象實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Go語(yǔ)言讀取,設(shè)置Cookie及設(shè)置cookie過(guò)期方法詳解
這篇文章主要介紹了Go語(yǔ)言讀取,設(shè)置Cookie及設(shè)置cookie過(guò)期方法詳解,需要的朋友可以參考下2022-04-04