Go語言數(shù)據(jù)庫編程GORM 的基本使用詳解
GORM 是 Go 語言最流行的 ORM 框架,封裝了
database/sql,支持自動遷移、關(guān)聯(lián)關(guān)系、事務(wù)等功能,開發(fā)體驗(yàn)接近于高層語言的 ORM。
一、安裝與初始化
1. 安裝 GORM 及數(shù)據(jù)庫驅(qū)動
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # PostgreSQL 用戶: # go get -u gorm.io/driver/postgres
2. 建立數(shù)據(jù)庫連接
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/gormdb?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("連接數(shù)據(jù)庫失敗:", err)
}
log.Println("連接成功")
}二、定義模型結(jié)構(gòu)體
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"uniqueIndex"`
Age int
CreatedAt time.Time
}- • 使用 GORM 標(biāo)簽配置字段屬性。
- • 支持自動創(chuàng)建
id、created_at等字段。
三、自動遷移表結(jié)構(gòu)
db.AutoMigrate(&User{})? 會自動創(chuàng)建表,如果表存在則進(jìn)行字段比對與升級(非破壞性)。
四、基本 CRUD 操作
1. 新增數(shù)據(jù)
user := User{Name: "Alice", Email: "alice@example.com", Age: 25}
db.Create(&user)
fmt.Println("新ID:", user.ID)2. 查詢數(shù)據(jù)
var user User db.First(&user, 1) // 主鍵查詢 db.First(&user, "email = ?", "alice@example.com") // 條件查詢
- •
First:查詢一條 - •
Find:查詢多條 - •
Where支持鏈?zhǔn)秸{(diào)用:
var users []User
db.Where("age > ?", 20).Order("age desc").Limit(10).Find(&users)3. 更新數(shù)據(jù)
db.Model(&user).Update("Name", "Alice Updated")
db.Model(&user).Updates(User{Name: "NewName", Age: 28}) // 多字段4. 刪除數(shù)據(jù)
db.Delete(&user)
五、條件構(gòu)造器
GORM 支持各種鏈?zhǔn)綏l件語句:
db.Where("name LIKE ?", "%alice%").Find(&users)
db.Where("age BETWEEN ? AND ?", 20, 30).Find(&users)
db.Not("name = ?", "Bob").Find(&users)六、鉤子函數(shù)(Hooks)
你可以定義方法攔截模型的創(chuàng)建、更新、刪除行為:
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
u.Name = "【新建】" + u.Name
return
}七、事務(wù)處理
err := db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&User{Name: "TxUser"}).Error; err != nil {
return err
}
if err := tx.Delete(&User{}, 1).Error; err != nil {
return err
}
return nil
})八、日志與調(diào)試
GORM 支持 SQL 日志:
import "gorm.io/gorm/logger"
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})九、常用配置項(xiàng)
| 配置 | 說明 |
Create, First, Find, Delete, Update | 基礎(chǔ) CRUD |
Where, Order, Limit, Offset | 鏈?zhǔn)綐?gòu)造條件 |
AutoMigrate | 自動建表/更新表結(jié)構(gòu) |
Model(&Model{}) | 設(shè)置操作對象 |
十、小結(jié)
| 功能 | 示例 |
| 創(chuàng)建表 | db.AutoMigrate(&User{}) |
| 插入 | db.Create(&user) |
| 查詢 | db.First, db.Where().Find |
| 更新 | db.Model().Updates() |
| 刪除 | db.Delete(&user) |
| 事務(wù) | db.Transaction(func) |
到此這篇關(guān)于Go語言數(shù)據(jù)庫編程:GORM 的基本使用的文章就介紹到這了,更多相關(guān)Go語言GORM使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang中的三個(gè)點(diǎn) ''...''的用法示例詳解
這篇文章主要介紹了golang中的三個(gè)點(diǎn) '...' 的用法示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
golang程序進(jìn)度條實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了golang程序?qū)崿F(xiàn)進(jìn)度條示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

