[函式庫] GORM
GORM 是 Golang 中使用 ORM 的方式操作資料庫的其中一種套件
基本了解與安裝
ORM
安裝
1
   | go get -u github.com/jinzhu/gorm
   | 
 
1 2 3 4
   | import (     "github.com/jinzhu/gorm"     _ "github.com/jinzhu/gorm/dialects/mysql" )
   | 
 
1 2 3 4
   | import _ "github.com/jinzhu/gorm/dialects/mysql" import _ "github.com/jinzhu/gorm/dialects/postgres" import _ "github.com/jinzhu/gorm/dialects/sqlite" import _ "github.com/jinzhu/gorm/dialects/mssql"
   | 
 
函式介紹
資料庫
連接與關閉資料庫
1 2 3 4
   | func main() {     db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")     defer db.Close() }
  | 
 
遷移 : 作用主要是刷新資料庫裡的 Table,使其保持最新
假設第一次寫入資料庫為
1 2 3 4 5
   | type User struct {     gorm.Model     Name string     Age string }
  | 
 
1 2 3 4 5 6
   | type User struct {     gorm.Model     Name string     Age string     Phone string }
  | 
 
呼叫 AutoMigrate() 後,資料庫會將以前的資料新增 Phone,內容為 NULL
1 2 3
   | type User struct {     gorm.Model     Name string
  | 
 
呼叫 AutoMigrate() 後,以前的資料保持不變,而新增的資料只有 Name,其他 Age、Phone 為 NULL
對 Table 操作
1 2 3 4 5
   |  db.HasTable(&User{})
 
  db.HasTable("users")
 
  | 
 
1 2 3 4 5 6 7 8
   |  db.DropTable(&User{})
 
  db.DropTable("users")
 
  db.DropTableIfExists(&User{}, "products")
 
  | 
 
定義模型
簡單的基礎模型
1 2 3 4 5
   | type CreditCard struct {     gorm.Model     UserID  uint     Number  string }
  | 
 
gorm.Model 包含 ID、CreatedAt、UpdatedAt、DeletedAt
對模型設置 Table 名
1 2 3
   | func (CreditCard) TableName() string {     return "CreditCard" }
  | 
 
若無設置,預設的 Table 名為複數形式,例如 : creditcards
CRUD 增刪改查
新增
1 2 3 4 5 6 7
   | user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
 
  db.NewRecord(user)
 
  db.Create(&user)
  | 
 
刪除
1 2 3 4 5
   |  db.Delete(&email)
 
  db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
 
  | 
 
更新
1 2 3 4 5 6
   | db.First(&user)
  user.Name = "jinzhu 2" user.Age = 100
  db.Save(&user)
   | 
 
1 2 3 4 5 6
   |  db.Model(&user).Update("name", "hello")
 
  db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "actived": false}) db.Model(&user).Updates(User{Name: "hello", Age: 18})
 
  | 
 
查詢
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   |  db.First(&user)
 
  db.Take(&user)
 
  db.Last(&user)
 
  db.Find(&users)
 
  db.First(&user, 10)
 
  db.Where("name = ?", "jinzhu").First(&user)
 
  | 
 
關於更多 GORM 的細節可以參考文檔 : GORM 中文文檔