G01學習筆記-6

zcold發表於2021-05-20

閱讀位置8.10

GORM

文件地址:《GORM 中文文件》
功能大全

  • 全功能 ORM
  • 關聯 (Has One,Has Many,Belongs To,Many To Many,多型,單表繼承)
  • Create,Save,Update,Delete,Find 中鉤子方法
  • 支援 PreloadJoins 的預載入
  • 事務,巢狀事務,Save Point,Rollback To Saved Point
  • Context,預編譯模式,DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表示式、Context Valuer 進行 CRUD
  • SQL 構建器,Upsert,資料庫鎖,Optimizer/Index/Comment Hint,命名引數,子查詢
  • 複合主鍵,索引,約束
  • Auto Migration
  • 自定義 Logger
  • 靈活的可擴充套件外掛 API:Database Resolver(多資料庫,讀寫分離)、Prometheus…
  • 每個特性都經過了測試的重重考驗
  • 開發者友好

1、安裝

  1. 安裝 gorm
    $ go get -u gorm.io/gorm
  2. 按照 gorm 的 MySQL 的資料庫驅動
    $ go get -u gorm.io/driver/mysql

2、快速開始

2.1 連線
config := mysql.New(mysql.Config{  
    DSN:  "homestead:secret@tcp(127.0.0.1:3306)/goblog?charset=utf8&parseTime=True&loc=Local",  
})
//*gorm.DB 物件
DB, err = gorm.Open(config,  &gorm.Config{})
.
// or 配置日誌,可檢視執行的sql
import gormlogger "gorm.io/gorm/logger"
.
.
.
DB, err = gorm.Open(config,  &gorm.Config{
    Logger: gormlogger.Default.LogMode(gormlogger.Info),  
})

gorm.Config 允許設定初始化配置資訊,其 Logger 可用來指定和配置 GORM 的偵錯程式。
LogMode 裡填寫的是日誌級別,分別如下:
Silent —— 靜默模式,不列印任何資訊
Error —— 發生錯誤了才列印
Warn —— 發生警告級別以上的錯誤才列印
Info —— 列印所有資訊,包括 SQL 語句
預設使用的是 Warn

2.2 配置
//*gorm.DB 物件有一個方法 DB() 可以直接獲取到 database/sql 包裡的 *sql.DB 物件
//db 為gorm.Open返回的 *gorm.DB 物件
sqlDB,  _  := db.DB()
// 設定最大連線數 
sqlDB.SetMaxOpenConns(100)  
// 設定最大空閒連線數 s
qlDB.SetMaxIdleConns(25)  
// 設定每個連結的過期時間 
sqlDB.SetConnMaxLifetime(5  * time.Minute)
2.3 使用
  1. 查詢
  • First():獲取一條記
    // First 獲取一條記錄
    err := db.First(&article ,  1).Error
    // select * from articles where id = 1
  • Find():獲取所有記錄
    //Find 獲取全部記錄
    var articles []Article 
    err := db.Find(&articles).Error
    // select * from articles

GORM 提供的是鏈式 API,如果遇到任何錯誤,GORM 會設定 *gorm.DB 的 Error 欄位
找不到記錄時,GORM 會返回 ErrRecordNotFound 錯誤

  1. 建立 Create ()

    article := Article{ Title: title, Body: body,  }
    result := db.Create(&article)
    // insert into articles(title, body) vaules (title, body)
    //insertID := article.ID
    //err := result.Error

    GORM 的 Create() 有幾個返回值可供判斷:

    article.ID             // 返回插入資料的主鍵
    result.Error           // Create結果返回 error
    result.RowsAffected    // 返回插入記錄的條數
  2. 修改 Save ()

    article := Article{ID:id, Title: title, Body: body,  }
    result := db.Save(&article)
    // update articles set title = title, body = body where id = id

    返回結果有兩個元素可以判斷:

    result.RowsAffected // 更新的記錄數
    result.Error        // 更新的錯誤
  3. 刪除 Delete()

    article := Article{ID:id, Title: title, Body: body,  }
    result := db.Delete(&article)
    // delete from articles where id = id

    同樣,返回結果有兩個元素可以判斷:

    result.RowsAffected // 更新的記錄數
    result.Error        // 更新的錯誤

關於 gorm ,後面繼續學習,先欠著

  • 貴在堅持,保持進步
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章