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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容