零基础之go语言10 | 青训营笔记

108 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天 本次笔记将一步一步演示Gorm的操作

Gorm

安装

终端下载gorm

image.png

go get -u github.com/jinzhu/gorm
go get -u gorm.io/driver/mysql
如用其他数据库就在mysql那里替换

连接数据库

  • dsn的配置:

      username:password@tcp(host:port)/Dbname?charset=utf8&parseTime=True&loc=Local
      数据库账号:数据库密码@tcp(数据库连接地址:数据库端口)/数据库名?charset=utf8mb4&parseTime=True&loc=Local
    

在workbench内:

image.png

package main

import (
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

func main() {
   dsn := "root:admin@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
   db, conErr := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if conErr != nil {
      panic("连接数据库失败")
   }
   println(db)
   println("连接数据库成功")
}

image.png

构建模型

数据库test有个名为user的表,表中有 ID,Name,Age,Email 4个属性。 因此,我需要在项目中构建一个与其相同结构的结构体,如下两图:

image.png

image.png

在idea中,我创建了一个entity(实体)的目录,专门用于存放与表对应的实体。
User文件中有一个User结构体,字段对应表中属性。
该文件还有一个TableName方法,用于告诉gorm这个对应的是数据库中的user

插入

创建一个User的对象,通过db.Create(user)来执行插入

//插入
user := entity.User{
   ID:    1,
   Name:  "_kukuku",
   Email: "kukuku1128@qq.com",
   Age:   1,
}
res := db.Create(user)
if res.Error != nil {
   panic("插入失败")
}
println("插入成功")

image.png

image.png

创建数组或切片users,通过db.Create(users)来执行批量插入

var users = []entity.User{{ID: 999, Name: "kukuku999"}, {ID: 998, Name: "kukuku998"}, {ID: 997, Name: "kukuku997"}}
res := db.Create(users)
if res.Error != nil {
   panic("插入一组失败")
}
println("插入一组成功")

这里仅仅是把插入操作移到了controller文件里的Insert、InsertSeveral函数内

image.png

image.png

查询

  • 按主键升序查询第一条记录

      db.First(user)
    

image.png

image.png

  • 查询所有

      db.Find(user)
    

image.png

image.png

  • 根据条件查询

      db.Where("条件=?", id).Find(user)
    
      根据id查询:db.Where("ID=?", id).Find(user)
    

image.png

image.png

image.png

更新

更新单个列

db.Model(存储返回的数据).Where("条件=?", "?的值").Update("改变的属性", 改变的值)

db.Model(user).Where("Name=?", "kukuku999").Update("ID", 123)

更新语句只会在user中修改你所更新的值,其他值不会改变

image.png

image.png

更新多列

db.Model(user).Where("Name=?", "_kukuku").Updates(entity.User{Age: 21, Email: "961919375@qq.com"})
注意是updates!

image.png

image.png

删除

db.Where("ID=?", 997).Delete(user)

image.png

image.png