亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go集成gorm數(shù)據(jù)庫的操作代碼

 更新時間:2024年11月07日 08:53:36   作者:hlsd#  
GORM 是一個用于 Go 語言的 ORM(對象關(guān)系映射)庫,它提供了一種簡單而強大的方式來與數(shù)據(jù)庫進行交互,GORM 支持多種數(shù)據(jù)庫,并且提供了豐富的功能,如自動遷移、預(yù)加載、事務(wù)管理等,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下

一、什么是gorm

GORM 是一個用于 Go 語言的 ORM(對象關(guān)系映射)庫,它提供了一種簡單而強大的方式來與數(shù)據(jù)庫進行交互。GORM 支持多種數(shù)據(jù)庫,包括 MySQL、PostgreSQL、SQLite、SQL Server 等,并且提供了豐富的功能,如自動遷移、預(yù)加載、事務(wù)管理等。

二、特性

  • 全功能 ORM
  • 關(guān)聯(lián) (Has One,Has Many,Belongs To,Many To Many,多態(tài),單表繼承)
  • Create,Save,Update,Delete,F(xiàn)ind 中鉤子方法
  • 支持 Preload、Joins 的預(yù)加載
  • 事務(wù),嵌套事務(wù),Save Point,Rollback To Saved Point
  • Context、預(yù)編譯模式、DryRun 模式
  • 批量插入,F(xiàn)indInBatches,F(xiàn)ind/Create with Map,使用 SQL 表達式、Context Valuer 進行 CRUD
  • SQL 構(gòu)建器,Upsert,數(shù)據(jù)庫鎖,Optimizer/Index/Comment Hint,命名參數(shù),子查詢
  • 復(fù)合主鍵,索引,約束
  • Auto Migration
  • 自定義 Logger
  • 靈活的可擴展插件 API:Database Resolver(多數(shù)據(jù)庫,讀寫分離)、Prometheus…
  • 每個特性都經(jīng)過了測試的重重考驗
  • 開發(fā)者友好

三、安裝

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

四、集成

func InitMySql() *gorm.DB {
 
	// 數(shù)據(jù)源設(shè)置
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN: viper.GetString("db.mysql.dsn"),
	}),
		&gorm.Config{NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "t_", 
			SingularTable: true,
		},
			Logger:                                   logger.Default.LogMode(logger.Info), 
			DisableForeignKeyConstraintWhenMigrating: true,                                
		},
	)
	if err != nil {
		panic(err)
	}
 
	sqlDb, _ := db.DB()
	sqlDb.SetMaxOpenConns(viper.GetInt("db.mysql.maxOpenConns"))
	sqlDb.SetMaxIdleConns(viper.GetInt("db.mysql.maxIdleConns"))
	sqlDb.SetConnMaxLifetime(time.Hour)
 
	return db
}

五、CRUD 接口

創(chuàng)建記錄

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
 
result := db.Create(&user) // 通過數(shù)據(jù)的指針來創(chuàng)建
 
user.ID             // 返回插入數(shù)據(jù)的主鍵
result.Error        // 返回 error
result.RowsAffected // 返回插入記錄的條數(shù)

查詢

GORM 提供了 First、Take、Last 方法,以便從數(shù)據(jù)庫中檢索單個對象。當(dāng)查詢數(shù)據(jù)庫時它添加了 LIMIT 1 條件,且沒有找到記錄時,它會返回 ErrRecordNotFound 錯誤

// 獲取第一條記錄(主鍵升序)
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;
 
// 獲取一條記錄,沒有指定排序字段
db.Take(&user)
// SELECT * FROM users LIMIT 1;
 
// 獲取最后一條記錄(主鍵降序)
db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;
 
result := db.First(&user)
result.RowsAffected // 返回找到的記錄數(shù)
result.Error        // returns error or nil
 
// 檢查 ErrRecordNotFound 錯誤
errors.Is(result.Error, gorm.ErrRecordNotFound)

更新

當(dāng)使用 Update 更新單列時,需要有一些條件,否則將會引起ErrMissingWhereClause 錯誤。 當(dāng)使用 Model 方法,并且它有主鍵值時,主鍵將會被用于構(gòu)建條件,例如:

// 根據(jù)條件更新
db.Model(&User{}).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true;
 
// User 的 ID 是 `111`
db.Model(&user).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111;
 
// 根據(jù)條件和 model 的值進行更新
db.Model(&user).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;

刪除

刪除一條記錄時,刪除對象需要指定主鍵,例如:

// Email 的 ID 是 `10`
db.Delete(&email)
// DELETE from emails where id = 10;
 
// 帶額外條件的刪除
db.Where("name = ?", "jinzhu").Delete(&email)
// DELETE from emails where id = 10 AND name = "jinzhu";

原生 SQL

db.Exec("DROP TABLE users")
db.Exec("UPDATE orders SET shipped_at = ? WHERE id IN ?", time.Now(), []int64{1, 2, 3})
 
// Exec with SQL Expression
db.Exec("UPDATE users SET money = ? WHERE name = ?", gorm.Expr("money * ? + ?", 10000, 1), "jinzhu")

到此這篇關(guān)于go集成gorm數(shù)據(jù)庫操作代碼的文章就介紹到這了,更多相關(guān)go集成gorm數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • goland把go項目打包進docker鏡像的全過程記錄

    goland把go項目打包進docker鏡像的全過程記錄

    golang編譯的應(yīng)用是不需要依賴其他運行環(huán)境的,下面這篇文章主要給大家介紹了關(guān)于goland把go項目打包進docker鏡像的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • GO 語言運行環(huán)境的基礎(chǔ)知識

    GO 語言運行環(huán)境的基礎(chǔ)知識

    這篇文章主要介紹了GO 語言運行環(huán)境的基礎(chǔ)知識的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • golang操作rocketmq的示例代碼

    golang操作rocketmq的示例代碼

    這篇文章主要介紹了golang操作rocketmq的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • go處理線程之間的交互示例代碼

    go處理線程之間的交互示例代碼

    Go語言以goroutine為核心實現(xiàn)并發(fā)編程,其中線程間交互主要通過Channels、WaitGroup、Mutex和Select實現(xiàn),Channels提供goroutine間的數(shù)據(jù)傳遞,本文給大家介紹go處理線程之間的交互示例代碼,感興趣的朋友一起看看吧
    2024-10-10
  • minikube部署Go應(yīng)用小結(jié)

    minikube部署Go應(yīng)用小結(jié)

    本文詳細介紹了在VMCentos7環(huán)境下使用Minikube和Kubernetes部署Go應(yīng)用的步驟,包括安裝Minikube和Kubectl、配置Docker鏡像源和私有倉庫、部署項目以及解決啟動過程中的常見問題,感興趣的朋友一起看看吧
    2025-03-03
  • GoLang?socket網(wǎng)絡(luò)編程傳輸數(shù)據(jù)包時進行長度校驗的方法

    GoLang?socket網(wǎng)絡(luò)編程傳輸數(shù)據(jù)包時進行長度校驗的方法

    在GoLang?socket網(wǎng)絡(luò)編程中,為了確保數(shù)據(jù)交互的穩(wěn)定性和安全性,通常會通過傳輸數(shù)據(jù)的長度進行校驗,發(fā)送端首先發(fā)送數(shù)據(jù)長度,然后發(fā)送數(shù)據(jù)本體,接收端則根據(jù)接收到的數(shù)據(jù)長度和數(shù)據(jù)本體進行比較,以此來確認數(shù)據(jù)是否傳輸成功
    2024-11-11
  • 在golang中使用Sync.WaitGroup解決等待的問題

    在golang中使用Sync.WaitGroup解決等待的問題

    這篇文章主要介紹了在golang中使用Sync.WaitGroup解決等待的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言模擬while語句實現(xiàn)無限循環(huán)的方法

    Go語言模擬while語句實現(xiàn)無限循環(huán)的方法

    這篇文章主要介紹了Go語言模擬while語句實現(xiàn)無限循環(huán)的方法,實例分析了for語句模擬while語句的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go?install和go?get的區(qū)別實例詳解

    go?install和go?get的區(qū)別實例詳解

    go install是Golang用來編譯和安裝自定義package的工具,下面這篇文章主要給大家介紹了關(guān)于go?install和go?get區(qū)別的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • golang解析json數(shù)據(jù)的4種方法總結(jié)

    golang解析json數(shù)據(jù)的4種方法總結(jié)

    在日常工作中每一名開發(fā)者,不管是前端還是后端,都經(jīng)常使用 JSON,下面這篇文章主要給大家介紹了關(guān)于golang解析json數(shù)據(jù)的4種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論