美文网首页
【GORM】使用示例

【GORM】使用示例

作者: 24c41111e47b | 来源:发表于2022-08-17 18:51 被阅读0次

    记录ORM的使用方式


    package main
    
    import (
        "fmt"
        "gorm.io/driver/mysql"
        "gorm.io/gorm"
        "time"
    )
    
    type Product struct {
        gorm.Model
        Code string
        Price uint
    }
    
    type User struct {
        gorm.Model
        Name string
        Age  uint
        Birthday time.Time
    }
    
    func main() {
        
        //quickStart()
        moreUse()
    }
    
    func moreUse()  {
        dsn := "root:cpf..0051@/gorm_learn" + "?charset=utf8mb4&parseTime=true&loc=Local" // 不设置parseTime会报错 loc设置时区为本地
        db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
        if err != nil {
            panic("连接数据库失败, ")
        }
        
        // 创建表
        db.AutoMigrate(&User{})
        
        //user := User{Name: "zhang", Age: 88, Birthday: time.Now()}
        
        //// 创建记录
        //result := db.Create(&user)
        //fmt.Printf("添加记录: id: %v, err: %v, rows: %v", user.ID, result.Error, result.RowsAffected)
        
        //// 用指定字段创建记录
        // 创建记录,并更新给出的字段
        //result := db.Select("Name", "Age", "CreatedAt").Create(&user) // 创建一个新记录,生日字段没有被更新
        // 创建记录,并更新未给出的字段
        //result := db.Omit("Name", "Age", "createdAt").Create(&user) // 创建新记录,只更新了 birthday 字段
        
        //// 批量插入
        //var users = []User{{Name: "xiaowang", Birthday: time.Now()}, {Name: "xiaoli", Birthday: time.Now()}, {Name: "xiaohong", Birthday: time.Now()}}
        //db.Create(&users)
        // 指定数量批量传(目前暂未发现和上面有什么区别)
        //var users = []User{{Name: "zz", Birthday: time.Now()} , {Name: "aa", Birthday: time.Now()}}
        //db.CreateInBatches(users, 1)
        
        //// 查询
        // 用主键检索
        //var user User
        //result := db.First(&user, 10) // 传一个空结构体进去,获取到id=10的记录
        // 用多个主键检索
        //var users []User
        //result := db.Find(&users, []int{2, 4, 6}) // 获取主键 2 4 6 的数据
        //for i := 0; i < len(users); i++ {
        //  user := users[i]
        //  fmt.Printf("记录: id: %v, err: %v, rows: %v \n", user.ID, result.Error, result.RowsAffected)
        //}
        // 检索全部对象
        //var users []User
        //db.Find(&users)
        
        //// 条件查询
        // 获取第一条匹配的记录
        //var user User
        //result := db.Where("name = ?", "susan").First(&user)
        // 其他如:全部匹配 模糊匹配 And匹配 时间区域匹配 区间匹配 见官方文档 https://gorm.io/zh_CN/docs/query.html
        
        //// 复合语句
        //db = db.Where("name = ?", "zhang")
        //db = db.Where("age=?", 88)
        //var count int64
        //result := db.Model(&User{}).Count(&count) // 使用 db.Model 设置表名
        //result := db.Table("users").Count(&count) // 使用 db.Table("tableName") 设置要查找的表名
        //fmt.Printf("记录: count: %v, err: %v, rows: %v \n", count, result.Error, result.RowsAffected)
        
        //defer fmt.Printf("添加记录: id: %v, err: %v, rows: %v \n", count, result.Error, result.RowsAffected)
    }
    
    func quickStart()  {
        
        // dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
        dsn := "root:cpf..0051@/gorm_learn" + "?charset=utf8mb4&parseTime=true&loc=Local" // 不设置parseTime会报错 loc设置时区为本地
        db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
        })
        if err != nil {
            panic("连接数据库失败, ")
        }
        
        // 迁移scheme (根据结构体里的字段创建一张表)
        db.AutoMigrate(&Product{})
        
        // 创建 (添加一条记录)
        db.Create(&Product{Code: "T1250", Price: 165})
        
        // 读取
        var product Product // 某条q记录
        var product1 Product
        db.First(&product, 1) // 根据整形主键查找
        fmt.Printf("主键为1的记录: %v %v \n", product.Price, product.Code)
        
        db.First(&product1, "code = ?", "D42") // 查找 code 字段为 D42 的记录 (!!!!注意:这里如果使用 &product, 则报错: record not found)
        fmt.Printf("code为D42的记录: %v %v \n", product1.Price, product1.Code)
        
        // 更新
        // 将 price更新为 200
        //db.Model(&product).Update("Price", 208)
        // 更新多个字段
        db.Model(&product).Updates(Product{Price: 44, Code: "F42"}) // 使用模型数据,仅更新非零值字段
        fmt.Printf("记录: %v %v \n", product.Price, product.Code)
        //db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F44"}) // 使用字典
        //fmt.Printf("记录: %v %v \n", product.Price, product.Code)
        
        // 删除记录
        db.Delete(&product)
    }
    
    

    GORM文档手册

    相关文章

      网友评论

          本文标题:【GORM】使用示例

          本文链接:https://www.haomeiwen.com/subject/tjqsgrtx.html