GORM
文件地址:《GORM 中文文件》
功能大全
- 全功能 ORM
- 關聯 (Has One,Has Many,Belongs To,Many To Many,多型,單表繼承)
- Create,Save,Update,Delete,Find 中鉤子方法
- 支援
Preload
、Joins
的預載入 - 事務,巢狀事務,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、安裝
- 安裝 gorm
$go get -u gorm.io/gorm
- 按照 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 使用
- 查詢
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
錯誤
建立
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 // 返回插入記錄的條數
修改
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 // 更新的錯誤
刪除
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 協議》,轉載必須註明作者和本文連結