您好,登錄后才能下訂單哦!
超好用的orm庫gorm是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
實際上,為提高開發效率,一般都會使用一些orm框架,把數據庫層屏蔽,用戶看到的只有對象而無需我們手動做一些轉換,這樣在使用的時候就非常方便。這種操作方式基本上已經成了標準做法。golang也有很多優秀的orm框架,今天就來介紹介紹gorm。
hook機制(Before/After Create/Save/Update/Delete/Find)
對象關系Has One, Has Many, Belongs To, Many To Many, Polymorphism
熱加載
支持原生sql操作
事務性
鏈式api
支持的數據庫有:mysql、postgre、sqlite、sqlserver
查詢操作
以上是gorm的功能,至于為什么是gorm?gorm 跟其他框架有什么不一樣?這里就不在介紹了。直接講用法吧。
go get -u github.com/jinzhu/gorm
db, err = gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/irisapp?charset=utf8&parseTime=True&loc=Local")if err != nil { panic("連接數據庫失敗")}
連接比較簡單,直接調用 gorm.Open 傳入數據庫地址即可。gorm支持基本上所有主流的關系數據庫,只是連接方式上略有不同,這里我用的 mysql為例吧。
type Product struct { ID int `gorm:"primary_key"` Code string `gorm:"type:varchar(20);"` Price int `gorm:"type:int;"` Name string `gorm:"type:varchar(64);"` Mail string `gorm:"type:varchar(256);"` CreatedAt time.Time}
if !db.HasTable(&Like{}) { if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Product{}).Error; err != nil { panic(err) }}
直接通過 db.CreateTable 就可以創建表了,非常方便,還可以通過 db.Set 設置一些額外的表屬性
另外,還有自動同步創建表的方法:
// 自動遷移模式db.AutoMigrate(&Product{})
var product Productdb.First(&product, 1) // 查詢id為1的productdb.First(&product, "code = ?", "ik01001") // 查詢code為l1212的product
// 創建db.Create(&Product{Code: "ik01001", Price: 1000})
構造已給對象,直接調用 db.Create() 就可以插入一條記錄。不用拼接sql語句,是不是很方便。
// 更新 - 更新product的price為2000db.Model(&product).Update("Price", 2000)
簡單對象刪除:
db.Delete(&product)復雜條件的刪除:if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err != nil { return err}
func CreateProducts(db *gorm.DB) err {
tx := db.Begin()
// 注意,一旦你在一個事務中,使用tx作為數據庫句柄
if err := tx.Create(&Product{Code: "ik01003", Price: 3000}).Error; err != nil {
tx.Rollback()
return err
}
tx.Commit()
return nil
}
事務的處理也很簡單,用 db.Begin() 聲明開啟事務,結束的時候調用 tx.Commit(),異常的時候調用 tx.Rollback()
看完上述內容,你們掌握超好用的orm庫gorm是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。