GORM 基礎(chǔ)CRUD

基礎(chǔ)CRUD操作文件記錄

基本的插入、更新浦楣、刪除享完、更多查看 GROM官網(wǎng) 查詢
默認(rèn)不使用全局日志輸出,可以在執(zhí)行前的代碼加上Debug() 可以輸出執(zhí)行的SQL語句
例如:db.Debug().Unscoped().Delete(&user)

package main

import (
    "fmt"
    "time"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

// User 用戶結(jié)構(gòu)體
type User struct {
    gorm.Model
    Name     string  `gorm:"size:100"`
    Age      uint    `gorm:"size:3"`
    Address  string  `gorm:"type:varchar(100)"`
    Money    float64 `gorm:"type:decimal(10,2)"`
    Birthday time.Time
}

// TableName 通過TableName方法將User表命名為`sys_users`
func (user User) TableName() string {
    return "sys_user"
}

// BeforeCreate 想在BeforeCreate hook 中修改字段的值
func (user *User) BeforeCreate(scope *gorm.Scope) error {
    fmt.Println("結(jié)構(gòu)創(chuàng)建前")
    // scope.SetColumn("ID", uuid.New())
    return nil
}

// BeforeUpdate 想在BeforeUpdate hook 中修改字段的值
func (user *User) BeforeUpdate(scope *gorm.Scope) error {
    fmt.Println("結(jié)構(gòu)更新前")
    // 使用UpdateColumn轻庆, UpdateColumns不會觸發(fā)
    // scope.SetColumn("ID", uuid.New())
    return nil
}

// AfterUpdate 想在AfterUpdate hook 中修改字段的值
func (user *User) AfterUpdate(scope *gorm.Scope) error {
    fmt.Println("結(jié)構(gòu)更新后")
    // 使用UpdateColumn癣猾, UpdateColumns不會觸發(fā)
    // scope.SetColumn("ID", uuid.New())
    return nil
}

// BeforeSave 想在BeforeSave hook 中修改字段的值
func (user *User) BeforeSave(scope *gorm.Scope) error {
    fmt.Println("結(jié)構(gòu)保存前")
    // 使用UpdateColumn敛劝, UpdateColumns不會觸發(fā)
    //  scope.SetColumn("EncryptedPassword", pw)
    return nil
}

// String 用戶字符串化
func (user *User) String() string {
    return fmt.Sprintf("編號:%d ,名字:%s 纷宇,年齡: %d 夸盟, 金錢: %.3f , 生日:%s", user.ID, user.Name, user.Age, user.Money, user.Birthday)
}

// 基礎(chǔ)CRUD
func main() {
    db, err := gorm.Open("mysql", "username:password@(127.0.0.1:3306)/database?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        println("err", err)
    }
    defer db.Close()

    // 創(chuàng)建表
    // db.CreateTable(&User{})
    // 檢查表是否存在
    // db.HasTable(&User{})
    // 刪除表
    // db.DropTable(&User{})
    // 不存在表時創(chuàng)建
    db.AutoMigrate(&User{})

    // 插入
    user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now(), Money: 123.34}
    fmt.Printf("數(shù)據(jù)庫內(nèi)結(jié)果主鍵為空 %t \n", db.NewRecord(user))
    db.Create(&user)
    // fmt.Println(user.String())

    // 更新單屬性
    // db.Model(&user).Update("name", "update")
    // 更新根據(jù)給定的條件更新單個屬性
    //db.Model(&user).Where("age = ?", 18).Update("name", "update")
    // 更新使用 struct 更新多個屬性像捶,只會更新其中有變化且為非零值的字段
    // db.Model(&user).Updates(User{Name: "update", Age: 66, Ac: 99.99})
    // fmt.Println(user.String())

    // 刪除現(xiàn)有記錄 只會將DeletedAt 字段的值會被設(shè)置為當(dāng)前時間
    // db.Delete(&user)
    // 直接清除記錄
    // db.Unscoped().Delete(&user)
    // 條件刪除
    // db.Where("name LIKE ?", "%update%").Delete(User{})
    // fmt.Println(user.String())

    // user := User{}
    // 通過主鍵查詢第一條記錄
    // db.First(&user)
    // 隨機(jī)取一條記錄
    // db.Take(&user)
    // 通過主鍵查詢最后一條記錄
    // db.Last(&user)
    // 查詢指定的某條記錄ID(只可在主鍵為整數(shù)型時使用)
    // db.First(&user, 1)
    // 通過條件查詢第一條記錄
    // db.Where("age = ?", "18").First(&user)
    // fmt.Println(user.String())

    var users []User
    // 拿到所有的記錄
    db.Find(&users)
    // 通過條件指定字段查詢
    // db.Where("age = ?", "18").Find(&users)
    // 通過條件多指定字段查詢
    // db.Where("name = ? AND age >= ?", "jinzhu", "18").Find(&users)
    // 通過條件<>查詢關(guān)鍵字前后
    // db.Where("name <> ?", "jinzhu").Find(&users)
    // 通過條件in查詢關(guān)鍵字是否存在
    // db.Where("age IN (?)", []float64{18, 20}).Find(&users)
    // 通過條件link模糊查詢
    // db.Where("name LIKE ?", "%jin%").Find(&users)
    // 通過條件BETWEEN AND區(qū)間范圍查詢
    // db.Where("created_at BETWEEN ? AND ?", "2019-11-15 19:17:03", time.Now()).Find(&users)
    // 通過條件>指定值查詢
    // db.Where("created_at > ?", "2019-11-15 10:17:03").Find(&users)
    // 通過條件不等值查詢 類似where
    // db.Not("created_at > ?", "2019-11-15 10:17:03").Find(&users)
    // 通過條件Or查詢 Struct 結(jié)構(gòu)體參數(shù)
    // db.Where("name = 'jinzhu'").Or(User{Name: "jinzhu 2"}).Find(&users)
    // 通過條件Or查詢 Map 多值條件
    // db.Where("name = 'jinzhu'").Or(map[string]interface{}{"name": "jinzhu1234"}).Find(&users)
    // 通過Select上陕,指定你想從數(shù)據(jù)庫中檢索出的字段桩砰,默認(rèn)會選擇全部字段
    // db.Select([]string{"name", "age"}).Find(&users)
    // 查詢軟刪除記錄
    // db.Debug().Unscoped().Where("deleted_at is not NULL").Find(&users)
    for i, v := range users {
        fmt.Println(i, v.String())
    }

    // 恢復(fù)刪除記錄
    // user := User{}
    // db.Unscoped().Where("deleted_at is not NULL and id = ?", 5).Find(&user)
    // db.Unscoped().Model(&user).Where("deleted_at is not NULL").Update("deleted_at", nil)
    // fmt.Println(user.String())

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市释簿,隨后出現(xiàn)的幾起案子亚隅,更是在濱河造成了極大的恐慌,老刑警劉巖庶溶,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煮纵,死亡現(xiàn)場離奇詭異,居然都是意外死亡偏螺,警方通過查閱死者的電腦和手機(jī)行疏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來套像,“玉大人酿联,你說我怎么就攤上這事《峁” “怎么了贞让?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柳譬。 經(jīng)常有香客問我震桶,道長,這世上最難降的妖魔是什么征绎? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任蹲姐,我火速辦了婚禮,結(jié)果婚禮上人柿,老公的妹妹穿的比我還像新娘柴墩。我一直安慰自己,他們只是感情好凫岖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布江咳。 她就那樣靜靜地躺著,像睡著了一般哥放。 火紅的嫁衣襯著肌膚如雪歼指。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天甥雕,我揣著相機(jī)與錄音踩身,去河邊找鬼。 笑死社露,一個胖子當(dāng)著我的面吹牛挟阻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼附鸽,長吁一口氣:“原來是場噩夢啊……” “哼脱拼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坷备,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熄浓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后省撑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玉组,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年丁侄,在試婚紗的時候發(fā)現(xiàn)自己被綠了惯雳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸿摇,死狀恐怖石景,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拙吉,我是刑警寧澤潮孽,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站筷黔,受9級特大地震影響往史,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佛舱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一椎例、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧请祖,春花似錦订歪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慎陵,卻和暖如春眼虱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背席纽。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工捏悬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆筒。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓邮破,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仆救。 傳聞我的和親對象是個殘疾皇子抒和,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常彤蔽。 O...
    我想起個好名字閱讀 5,334評論 0 9
  • 一摧莽、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,748評論 0 10
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL顿痪、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,527評論 0 4
  • 或許你很難了解一位玉器保藏家會不遠(yuǎn)萬里的回到玉器的原石場所镊辕。 因?yàn)樯碓谟竦谋2刂校徽撃闶嵌嗝床耪{(diào)橫溢蚁袭、才學(xué)過人征懈,...
    怎么好看怎么辦閱讀 259評論 0 0
  • 祝天下所有的卖哎,母親,媽媽删性,媽咪亏娜,娘,節(jié)日快樂蹬挺,身體健康维贺!
    鵬展水云間閱讀 143評論 0 0