[函式庫] 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 中文文檔