Gorm 常用操作總結


摘要:由於在實習的工作中,采用的是 Go 語言,數據庫操作采用的 ORM 框架是 Gorm, 所以就來總結一下使用過程中遇到的一些問題。

基本操作

Save

當匹配主鍵的數據不存在時,它的效果是插入一條新數據,而當匹配的主鍵存在時,則更新全部字段。無論字段是否做了修改或者是定義類型的默認值。

package model

const UserTable = "t_user"

type User struct {
    Id           int     `gorm:"column:id; type:int(11);primary_key"`
    Name         string  `gorm:"column:name; type:varchar(32);"`
    Age          int     `gorm:"column:age; type:int(11);"`
    Description  string  `gorm:"column:description; type:varchar(512);"`
}

func (User) TableName() string {
    return UserTable
}

note: 特別注意 Id 的定義中的 primary_key, 如果沒有加這個 Save 方法是無法正常工作的。

note: 如果在定義時,沒有給 Age 賦值,那么這條數據的 Age 將被置為 0。

note: 可以通過判斷傳入的主鍵字段是否為空來覺得是否要將此字段加入到結構體中,如果不為空,加入結構體,此時:找到則更新;如果為空,則會新建。

用處:不用顯示判斷是新增數據還是更新數據,可以讓代碼更加簡潔。

 

func (User) SaveOne(db *gorm) {
    user := User{Id:1, Name:"Tom", Age:18, Description:"A Man"}
    if err := db.Save(&user).Error; err != nil {
        fmt.Errorf("Save user failed, err: %+v\n", err)
        return
    }
}
// id 為主鍵
// 當記錄不存在時,執行的 Sql 語句是:
insert into t_user(id, name, age, description) value (1, "Tom", 18, "A Man")
// 當記錄存在時,執行的 Sql 語句是:
update t_user set name = "Tom", age = 18, description = "A Man" where id = 1

 

Where

Gorm 的一個非常好用的特征就是鏈式查詢,在不同條件下需要有不同的查詢條件這樣的場景中,利用該特征能幫助我們大大簡化代碼。

func (User) FindQuery(query *gorm.DB, installId, appId string) *gorm.DB {
    query = query.Where("install_id = ?", installId)
    if appId != "" {
        query = query.Where("app_id = ?", appId)
    }
    return query
}

 

參考資料:

https://juejin.im/post/5d29988e6fb9a07efc49b612

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM