• GORM:创建数据


    package main
    
    import (
        "fmt"
        "strconv"
        "time"
    
        _ "github.com/go-sql-driver/mysql"
        "gorm.io/driver/mysql"
        "gorm.io/gorm"
    )
    
    //定义一个结构体,gorm允许定义结构体的时候通过tag定义结构体的权限,例如:
    // type User struct {
    //     Name string `gorm:"<-:create"` // 允许读和创建
    //     Name string `gorm:"<-:update"` // 允许读和更新
    //     Name string `gorm:"<-"`        // 允许读和写(创建和更新)
    //     Name string `gorm:"<-:false"`  // 允许读,禁止写
    //     Name string `gorm:"->"`        // 只读(除非有自定义配置,否则禁止写)
    //     Name string `gorm:"->;<-:create"` // 允许读和写
    //     Name string `gorm:"->:false;<-:create"` // 仅创建(禁止从 db 读)
    //     Name string `gorm:"-"`  // 通过 struct 读写会忽略该字段
    //   }
    
    // 定义一个雇员
    type Emp struct {
        Id         int
        Name       string
        Age        int
        Gender     uint8     // 对应数据库中的bit
        Birthday   time.Time // 对应数据库中的date
        Salary     float32
        Department string
    }
    
    // 定义一个学生
    type Student struct {
        Name string
        Age  int
    }
    
    // 实例化结构体的时候,time.Time输入字符串报错,所以这里定义了一个将字符串转换成时间的函数
    func s2t(s string) time.Time {
        t, _ := time.Parse("2006-01-02", s)
        return t
    }
    
    func main() {
        dsn := "root:123456@(127.0.0.1:3306)/golang?charset=utf8mb4&parseTime=true"
        db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
        if err != nil {
            fmt.Printf("connect DB failed, err:%v
    ", err)
            return
        }
    
        // 单个插入
        employee := Emp{
            Name:       "WangWu1",
            Age:        18,
            Gender:     1,
            Birthday:   s2t("1995-12-12"),
            Salary:     31232.123,
            Department: "销售部",
        }
        user := Student{Name: "zhaosi", Age: 33}
        result := db.Create(&employee)
        fmt.Println(employee.Id)         // 返回插入数据的主键
        fmt.Println(result.Error)        // 返回 error
        fmt.Println(result.RowsAffected) // 返回插入记录的条数
        result := db.Select("Name", "Age").Create(&user)
        fmt.Println(result.Error)        // 返回 error
        fmt.Println(result.RowsAffected) // 返回插入记录的条数
        fmt.Println(employee)
    
        // 批量插入
        stu := []Student{
            {Name: "stu1", Age: 18},
            {Name: "stu2", Age: 19},
            {Name: "stu3", Age: 11},
            {Name: "stu4", Age: 12},
            {Name: "stu5", Age: 13},
        }
    
        result := db.Create(&stu)
        fmt.Println(result.Error)        // nil
        fmt.Println(result.RowsAffected) // 5
    
        // 批量分配插入
        stu1 := make([]Student, 0)
        for i := 100; i < 200; i++ {
    
            stu1 = append(stu1, Student{Name: "stu" + strconv.Itoa(i), Age: 20 + i})
        }
        ret := db.CreateInBatches(stu1, 10) // 每次写入10个
        fmt.Println(ret.Error)              // nil
        fmt.Println(ret.RowsAffected)       // 100
    
        // GORM 支持根据 map[string]interface{} 和 []map[string]interface{}{} 创建记录
        ret := db.Model(&Student{}).Create(stu1) // 基于元素为map类型的切片创建
        fmt.Println(ret.Error)                   // nil
        fmt.Println(ret.RowsAffected)            // 100
    
    }
  • 相关阅读:
    kernel makefile分析 之include路径分析
    python模块,包,安装
    python 资源
    Python版QQ群发消息
    marvell 88f6282 工程包制作
    CPU : 二级缓存容量
    编译多个文件到内核模块
    展布频谱(Spread Spectrum, SS)
    编程练习 链表题目反序,合并
    汇编语言基础之七 框架指针的省略(FPO)
  • 原文地址:https://www.cnblogs.com/tortoise512/p/15316400.html
Copyright © 2020-2023  润新知