• 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)
  • 相关阅读:
    Windows Phone 7 立体旋转动画的实现
    jQuery 表格Table插件汇总
    SNS社交类网站照片头像裁剪源码
    VS无法启动调试
    SQL Server中获取第一天、最后一天
    jQuery技巧总结
    IT人士应当知道的10个行业小内幕
    巧用SQL server临时表
    将Html文档整理为规范XML文档
    16个Javascript的Web UI库、框架及工具包
  • 原文地址:https://www.cnblogs.com/shenjianping/p/15956955.html
Copyright © 2020-2023  润新知