grom的理解与掌握

前言

什么是gorm
gorm是一种数据库操作辅助工具,在我们go的结构体和数据库之间产生映射,让我们对数据库的关系,标的内容,直观的体现在结构体上,使用结构体即可完成增删改查操作

使用gorm进行数据库操作

gorm如何链接数据库
导入gorm-------导入mysql驱动器----------使用open链接得到数据库操作对象(以mysql为例)
do,err:=gorm.Open(“mysql”,“user:password@/dbname?charset=utf8&parseTime=True$loc=Local”)
defer db.Close()
自动化创建数据库表
gorm支持自动迁移模式 使用AutoMigrate 方法来帮助我们自动化创建数据库表
db.AutoMigrate(&Product{})
代码实例

type HelloWord struct{
      gorm.Model
      Name string
      Sex    bool
      Age   int
}

func main(){
     db.err:=gorm.Open("mysql","root:123456@/ginclass?charset=utf8&parseTime=True$loc=Local")
     if err!=nil{
          panic(err)
}
db.AutoMigrate(&HelloWord{})
defer db.close()
}

最简单的增删改查
增:Create (跟结构体指针地址)

type HelloWord struct{
      gorm.Model
      Name string
      Sex    bool
      Age   int
}

func main(){
     db.err:=gorm.Open("mysql","root:123456@/ginclass?charset=utf8&parseTime=True$loc=Local")
     if err!=nil{
          panic(err)
}
db.AutoMigrate(&HelloWord{})

db.Create(&HelloWord{
        Name:"qm",
        Sex:true,
        Age:18,
})
defer db.close()
}

删:Delete (跟结构体指针地址)或者会根据主键自动去查询单条或者查询单条或者根据条件删除多条

db.Deleter(&HelloWord{},"id=?",1)
db.Where("id in (?)",[]int {1,2}).Unscoped().Delete(&HelloWord{})

改:Update 更新单一数据 还有Updates 更新数据中指定内容Save更新所有内容

db.Where(:"id = ?",1).First(&HelloWord{}).Update(:"name","qimiao")
db.Where(:"id in (?)",[]int{1,2}).Find(&[]HelloWord{}).Updates(map[string]interface{}{
            "Name":"qimiaoshuai",
            "Sex":true,
            "Age":26,
})

查:First(跟结构体示例指针地址) Find(跟结构体切片指针地址)
条件:Where Or 填写简单的sql查询语句执行得到model
模型:model

gorm结构体的创建技巧和结合gin使用

在这里插入图片描述
注:上图第一列是tag设置

type User struct{
        gorm.Model
        Name string `gorm:primary_key;column:'user_name';type:'varchar(100)';"`
}

func (u User)TableName()string{
        return "qm_users"
}

func main(){
       db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")
       db.AutoMigrate(&User{})
       defer db.Close()
}

在这里插入图片描述

type Class struct{
       gorm.Model
       ClassName string
       Students []Student
 }
 type Student struct{
      gorm.Model
      StudentName string
      ClassId uint
      IDCard IDCard
      Teachers []Teachers  `gorm:"many2many:student_teachers;"`
    }
type IDCard struct{
     gorm.Model
     StudentID uint
     Num   int
}

type Teacher struct{
       gorm.Model
       TeacherName string
       Students []Student `gorm:"many2many:student_teachers;"`
}

func main(){
       db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")
       db.AutoMigrate(&Teacher{},&Class{},&Student{},&IDCard{})
       s:=Student{
             StudentName:"qm",
             IDCard:i,
        }
        i:=IDCard{
               Num:123456,
       }
       t:=Teacher{
               TeacherName:"老师傅“,
                Students: []Student{s},
      }
      c:=Class{
             ClassName:"XXX的班级“,
             Students: []Student{s},
      }
      _ := db.Create(&c).Error
      _:=db.Create(&t).Error
      
       defer db.Close()
}

配合gin框架
结构体和上文一样,就是main函数里需要变换

func main(){
       db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")
       db.AutoMigrate(&Teacher{},&Class{},&Student{},&IDCard{})
       defer db.Close()
       r:=gin.Default()
       r.POST("/student", func(c *gin.Context){
             var student Student
             _=c.BindJSON(&student)
             db.Create(student)
})
        r.GET("/student/:id",func(c *gin.Context){
             id := c.Param("ID")
             var student Student
             _ = c.BindJSON(&student)
             db.Preload().First(&student,"id = ?",id)
             c.JSON(200,gin.H{
                   "s":student,
             })
})
     r.Run(":8080")
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值