一、基本創建
(一)單條數據創建
- 模型表
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)
