GORM的简单理解
? ? ? ? 1、GORM是一種對象關(guān)系映射ORM框架,數(shù)據(jù)表對應(yīng)結(jié)構(gòu)體,數(shù)據(jù)行對應(yīng)結(jié)構(gòu)體實例,數(shù)據(jù)庫字段對應(yīng)結(jié)構(gòu)體字段。
在gorm中,表名默認就是結(jié)構(gòu)體名稱的復數(shù),也可以通過方法或者db.Table("表名")自定義表名;
列名由兩個單詞組成,在數(shù)據(jù)庫中默認轉(zhuǎn)小寫后用下劃線鏈接;
如果結(jié)構(gòu)體有ID字段則默認ID字段為主鍵。
? ? ? ? 2、另外,GORM內(nèi)置了一個gorm.Model結(jié)構(gòu)體。gorm.Model是一個包含了ID, CreatedAt, UpdatedAt, DeletedAt四個字段的Golang結(jié)構(gòu)體,可以將其嵌入到自己的結(jié)構(gòu)體中。(如果模型內(nèi)置了gorm.model有DeletedAt字段,則調(diào)用Delete刪除該記錄時,將會設(shè)置DeletedAt字段為當前時間,而不是直接將記錄從數(shù)據(jù)庫中刪除,即軟刪除)
????????3、gorm中支持的結(jié)構(gòu)體tag:
Type?? ?指定列數(shù)據(jù)類型
Size?? ?指定列大小, 默認值255
PRIMARY_KEY?? ?將列指定為主鍵
UNIQUE?? ?將列指定為唯一
NOT NULL?? ?將列指定為非 NULL
Column?? ?指定列名
default ?設(shè)置默認值
????????4、例子:
查詢db.Select("name, age").Order("age desc").Limit(3).Find(&user, "name = ?", "jinzhu") db.Select("name, age").Order("age desc").Limit(3).Where("name = ?","jinzhu").Find(&users)修改 // 根據(jù)給定的條件更新單個屬性 db.Model(&user).Where("active = ?", true).Update("name", "hello") // 使用 map 更新多個屬性,只會更新其中有變化的屬性 db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "active": false}) // 使用 struct 更新多個屬性,只會更新其中有變化且為非零值的字段 db.Model(&user).Updates(User{Name: "hello", Age: 18})如果你想更新或忽略某些字段,你可以使用 Select,Omit刪除 db.Where("email LIKE ?", "%jinzhu%").Delete(Email{}) db.Delete(Email{}, "email LIKE ?", "%jinzhu%")????????在 GORM 中使用多個立即執(zhí)行方法時,后一個立即執(zhí)行方法會復用前一個立即執(zhí)行方法的條件 (不包括內(nèi)聯(lián)條件,find中寫的條件) 。立即執(zhí)行方法是指那些會立即生成SQL語句并發(fā)送到數(shù)據(jù)庫的方法,一般是CRUD方法,如:Create, First, Find, Take, Save, UpdateXXX, Delete, Scan, Row, Rows…
5、db.debug? 可以返回查詢的sql語句
總結(jié)
- 上一篇: 华为反击!要求美国运营商巨头支付 10
- 下一篇: 手把手实现一条延时消息