美文网首页
【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】使用示例

    记录ORM的使用方式 GORM文档手册[https://gorm.io/zh_CN/docs/index.html]

  • Golang GORM使用

    Golang GORM使用 gorm gorm是go语言中实现数据库访问的ORM(对象关系映射)库。使用这个库,我...

  • golang gorm(一)---gorm入门示例

    gorm是go语言的一个orm框架,框架的原理和思想在这里就不做详细介绍了,我主要演示一下gorm的实际使用。 开...

  • go mod tidy

    go mod tidy用于加载依赖比如我在程序中使用 但是我只安装了gorm.io/gorm而没有安装gorm.i...

  • 使用gorm

    为何使用orm 我一直以来都不太喜欢用orm,觉得不够灵活。但是当我需要批量保存数据的时候,体验了一下orm,它的...

  • Gorm笔记(一)-- Gorm使用

    gorm文档:http://gorm.book.jasperxu.com/ 在搭建GinWeb的时候需要初始化or...

  • gorm源码2 tag映射

    参考 理解reflect 通过reflect获取tag值 gorm外键使用 gorm指定外键和关联外键 目的 分析...

  • Gorm scope实现分页

    Gorm是一个非常棒的ORM。今天,我将向您展示如何使用Gorm Scopes创建分页。 Scopes可以实现一些...

  • gorm批量插入数据

    最近用 gin+mysql编写web工程,其中使用了gorm库对数据库进行操作。由于gorm目前暂未提供 批量插入...

  • github上Go项目star排名21~30

    Gorm[https://github.com/go-gorm/gorm]:https://github.com/...

网友评论

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

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