最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、什么是gorm

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

二、特性

  • 全功能 ORM
  • 關聯(lián) (Has One,Has Many,Belongs To,Many To Many,多態(tài),單表繼承)
  • Create,Save,Update,Delete,F(xiàn)ind 中鉤子方法
  • 支持 Preload、Joins 的預加載
  • 事務,嵌套事務,Save Point,Rollback To Saved Point
  • Context、預編譯模式、DryRun 模式
  • 批量插入,F(xiàn)indInBatches,F(xiàn)ind/Create with Map,使用 SQL 表達式、Context Valuer 進行 CRUD
  • SQL 構建器,Upsert,數(shù)據(jù)庫鎖,Optimizer/Index/Comment Hint,命名參數(shù),子查詢
  • 復合主鍵,索引,約束
  • 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ù)源設置
	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 提供了 FirstTake、Last 方法,以便從數(shù)據(jù)庫中檢索單個對象。當查詢數(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)

更新

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

// 根據(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")

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

相關文章

  • Golang中interface是引用類型的原因解析

    Golang中interface是引用類型的原因解析

    在Go語言中,將interface設計為引用類型是為了實現(xiàn)更靈活、更動態(tài)的類型系統(tǒng),這篇文章主要介紹了深度解析Golang中為什么interface是引用類型,需要的朋友可以參考下
    2024-01-01
  • Golang 中 omitempty的作用

    Golang 中 omitempty的作用

    這篇文章主要介紹了Golang 中 omitempty的作用,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考一下,需要的小伙伴可以參考一下
    2022-07-07
  • 解決Go語言time包數(shù)字與時間相乘的問題

    解決Go語言time包數(shù)字與時間相乘的問題

    這篇文章主要介紹了Go語言time包數(shù)字與時間相乘的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • golang線程安全的map實現(xiàn)

    golang線程安全的map實現(xiàn)

    這篇文章主要介紹了golang線程安全的map實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Golang?WaitGroup?底層原理及源碼解析

    Golang?WaitGroup?底層原理及源碼解析

    WaitGroup?是?Golang?中最常見的并發(fā)控制技術之一,它的作用我們可以簡單類比為其他語言中多線程并發(fā)控制中的?join(),這篇文章主要介紹了Golang?WaitGroup?底層原理及源碼詳解,需要的朋友可以參考下
    2023-04-04
  • 入門學習Go的基本語法

    入門學習Go的基本語法

    這篇文章主要介紹了Go語法的基本概念,本文講解了Golang的基本知識、基礎語法、相關術語等,需要的朋友可以參考下,希望能幫助到你
    2021-07-07
  • 自動生成代碼controller?tool的簡單使用

    自動生成代碼controller?tool的簡單使用

    這篇文章主要為大家介紹了自動生成代碼controller?tool的簡單使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 深入探索Go語言中的高效數(shù)據(jù)結構堆

    深入探索Go語言中的高效數(shù)據(jù)結構堆

    堆,作為一種基本的數(shù)據(jù)結構,以其在優(yōu)先隊列和排序算法中提供高效解決方案的能力而聞名。在本文中,我們將深入探討堆的內(nèi)部工作原理,包括其特性、實現(xiàn)細節(jié)以及在現(xiàn)代編程中的應用
    2008-06-06
  • go mod tidy拉取依賴包bug問題及解決

    go mod tidy拉取依賴包bug問題及解決

    這篇文章主要介紹了go mod tidy拉取依賴包bug問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go語言學習之WaitGroup用法詳解

    Go語言學習之WaitGroup用法詳解

    Go語言中的?WaitGroup?和?Java?中的?CyclicBarrier、CountDownLatch?非常類似。本文將詳細為大家講講WaitGroup的用法,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-06-06

最新評論

石泉县| 萨嘎县| 洞口县| 南雄市| 定兴县| 马关县| 收藏| 红桥区| 阿合奇县| 将乐县| 思茅市| 察隅县| 郸城县| 淄博市| 尼玛县| 江山市| 昌平区| 嘉鱼县| 合肥市| 达拉特旗| 江口县| 梓潼县| 蒙城县| 唐河县| 墨玉县| 拜泉县| 大石桥市| 吕梁市| 古丈县| 内乡县| 雅安市| 黄山市| 仲巴县| 临沂市| 新密市| 大埔县| 察雅县| 河南省| 景东| 南昌县| 平阴县|