Gorm基本使用 & 抖音项目连接数据库|青训营笔记

245 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

怕什么真理无穷,进一步有进一步的欢喜

Go使用Gorm进行数据库连接

1.连接本地数据库

首先肯定是要找到本地的用户名& 密码,调用gorm.Open(...)进行本地数据库的连接

  • 定义连接信息,用户名、密码、通信协议等信息
  • 连接数据库,连接数据库时,可以加上一些高级配置,就是gorm.Config中的参数
  • 密码:woshimima, 数据库:community
func main() {
  url := "root:woshimima@tcp(127.0.0.1:3306)/community?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(url), &gorm.Config{})
  if err != nil {
    fmt.Println("连接失败")
    return
  } else {
    fmt.Println("连接成功")
  }
}
  

2.创建表

gorm创建表可以是根据结构体对象进行数据库表的创建,我们设定好结构体的字段就能够直接创建数据表了

type User struct {
  Name    string `json:"name"`
  Id      int     
  Password string 
}
​
func main() {
  ///数据库的连接
  //................
  
  db.AutoMigrate(&User{})   //根据结构体字段进行创建表
}

3.插入数据

同样的,能够根据结构体字段进行表字段的创建,我们就可以通过对象进行数据的插入

db.Create(....) 其中....就是我们创建的结构体对象,注意要和对应的表字段是匹配的才可以

type User struct {
  ....
}
​
func main() {
  //....连接数据库
  
  //上述我们已经创建了表字段了
  
  user := User {"tom", 1 "woshimima"}
  db.Create(user)
}

4.查询数据

  • 查询满足条件的所有的结果

    db.Where("Name = ?", "Xiao").Find(&users)

    上述例子就是查询NameXiao的所有的结果 存放到 users

  • 查询不满足条件的所有的结果

    db.Where("Name <> ?","xiao").Find(&user)

    上述就是查询出了名字是Xiao的所有的用户

  • 模糊查询

    db.Where("Name like ?","xiao").Find(&user)

  • 多条件查询

    db.Where("Name = ? and Id = ?", "Xiao", 2).Find(&user)

总的来说呢,就是前面是sql语句,?对应后面我们需要查询的具体的键值

5.删除数据

db.Where("Name = ?", "Tom").Delete(User{})
//从数据库中删除Name 为 Tom的数据

6.项目样例

这里简单的介绍一下使用呀,其实我刚刚学会😢

青训营抖音的官方样例是使用的map[stiring]User在内存中进行存储,只能单次使用。

这里我简单演示一下:

  • 在调用Register的时候将User信息存储到MySQL数据库中
  • 在调用Login的时候将User信息从MySQL中取出来
  • ⚠️:这里没有考虑数据库中已经存在传入的数据的情况,请自行添加

具体实现过程

  • 首先使用gorm创建数据库的表,或者是直接在本地创建,这里不演示了
  • 在controller包下面创建函数InitDb()用于数据库的连接,注意将db设置为包下的全局变量以便包下面的其他的函数进行数据库的调用

Screen Shot 2022-05-19 at 11.24.50 AM.png

  • 修改Register()将新创建的对象添加到数据库表中

Screen Shot 2022-05-19 at 11.28.14 AM.png

Screen Shot 2022-05-19 at 11.30.23 AM.png

  • 进行Login()函数的修改

因为传入的是用户名 + 密码,我们新创建一个结构体UserLoginInfo,包含User & Token

Screen Shot 2022-05-19 at 11.33.18 AM.png

Screen Shot 2022-05-19 at 11.34.06 AM.png