GORM系列之創建數據


一、基本創建

(一)單條數據創建

  •  模型表
type Base struct {
    ID int
    Name string
    Age int
}
  • 方法一 通過數據的指針來創建
    base := Base{Name: "lily", Age: 18}
    result := db.Create(&base) //通過數據指針進行創建
    fmt.Println(result.Error) // 返回 error
    fmt.Println(result.RowsAffected) // 返回插入記錄的條數
  • 方法二 根據 Map 創建
    db.Model(&Base{}).Create(map[string]interface{}{
        "Name": "kiki",
        "Age": 20,
    })

(二)批量創建

  • 方法一 通過數據的指針來創建

要有效地插入大量記錄,請將一個 slice 傳遞給 create方法。 GORM 將生成單獨一條SQL語句來插入所有數據,並回填主鍵的值,鈎子方法也會被調用。

    var baseUsers = []Base{
        {
            Name: "kiki",
            Age:  20,
        },
        {
            Name: "wan",
            Age:  22,
        },
    }
    db.Create(&baseUsers) // 創建多條記錄

    for _, user := range baseUsers {
        fmt.Println(user.ID) //回填主鍵的值
    }

使用 CreateInBatches分批創建時,你可以指定每批的數量

    var baseUsers = []Base{
        {
            Name: "kiki",
            Age:  20,
        },
        {
            Name: "wan",
            Age:  22,
        },
          ...
    }
    db.CreateInBatches(&baseUsers, 100) // 每次插入100條    
  • 方法二 根據Map創建
    db.Model(&Base{}).Create([]map[string]interface{}{
        {
            "Name": "kiki",
            "Age":  20,
        },
        {
            "Name": "wan",
            "Age":  22,
        },
    })

二、創建進階

(一)指定字段創建

    // 創建記錄並更新給出的字段
    baseUser := Base{Name: "lily", Age: 18}
    //db.Select("Name", "Age").Create(&baseUser)
    // INSERT INTO `Base` (`name`,`age`) VALUES ("lily", 18)

    // 創建一個記錄且一同忽略傳遞給略去的字段值, 此時Name取默認值為空
    db.Omit("Name").Create(&baseUser)
    // INSERT INTO `Base` (`age`) VALUES (18)

(二)關聯創建

 如果一個模型嵌套另一個模型,那么怎么創建數據呢?

  • 模型表
type Base struct {
    ID   int
    Name string
    Age  int `gorm:"default:20"` //指定默認值為20
}

type User struct {
    Base     Base `gorm:"embedded;embeddedPrefix:base_"`
    NickName string
}
  • 創建
    // 關聯創建, 如果沒寫字段使用默認值創建
    db.Create(&User{
        NickName: "小花",
        Base: Base{
            Name: "xiaohua",
        },
    })

也可以通過 Select、 Omit 跳過關聯保存,例如:

db.Omit("Base").Create(&User)

// 跳過所有關聯
db.Omit(clause.Associations).Create(&User)

 


免責聲明!

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



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