以前在已經介紹了用的github.com/go-sql-driver/mysql 訪問數據庫,不太瞭解的能夠看看以前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。實際上,爲提升開發效率,通常都會使用一些orm框架,把數據庫層屏蔽,用戶看到的只有對象而無需咱們手動作一些轉換,這樣在使用的時候就很是方便。這種操做方式基本上已經成了標準作法。golang也有不少優秀的orm框架,今天就來介紹介紹gorm。html
爲何要使用orm? 爲何是gorm? gorm 跟其餘框架有什麼不同?這裏就不在介紹了。直接講用法吧。mysql
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爲例吧。git
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 設置一些額外的表屬性github
另外,還有自動同步建立表的方法:golang
// 自動遷移模式 db.AutoMigrate(&Product{})
var product Product db.First(&product, 1) // 查詢id爲1的product db.First(&product, "code = ?", "ik01001") // 查詢code爲l1212的product
// 建立 db.Create(&Product{Code: "ik01001", Price: 1000})
構造已給對象,直接調用 db.Create() 就能夠插入一條記錄。不用拼接sql語句,是否是很方便。sql
// 更新 - 更新product的price爲2000 db.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()app
1. 以上就把基本的增刪改查介紹完了,實際使用中還有不少高級的用法,好比關聯查詢,主外鍵設置等。你們能夠看看官方的使用說明: http://gorm.book.jasperxu.com/框架
2. 因爲空間已經滿了,完整代碼示例代碼下載,能夠關注微信公衆號,下載完整代碼。