数据库| 青训营笔记

82 阅读2分钟

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

设计模式 数据库

了解 Go 的 Database/SQL的实现 了解 GORM 的实现原理、简单使用 如何基于 GORM 做一些定制化开发

1 gorm 基础使用

设计简洁 功能强大 自由拓展的全功能的ORM

1.1安装gorm

import (    
    "fmt"    
    "github.com/jinzhu/gorm"    
    _ "github.com/jinzhu/gorm/dialects/mysql"    
)

1.2连接数据库

    //            数据库类型   用户名:密码  本机地址  端口号 数据名
db, err := gorm.Open("mysql", "root:root@(127.0.0.1:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")//连接数据库      
if err!= nil{   //是否出错         
      panic(err)    
}    
defer db.Close() //关闭数据库       

    

1.3增删改查

type User struct {    
    Id       int64 `gorm:"primary_key" json:"id"` // 设置id为主键    
    Username string    
    Password string    
}    
db.AutoMigrate(&UserInfo{})  //自动迁移    自动创建表结构    

u1 := UserInfo{1, "枯藤", "男", "篮球"}//通过结构创建对象

db.Create(&User{
	Id:       1,
	Username: "test",
	Password: "123456",
})  // 新增一条数据,相当于INSERT INTO `test_db`.`users` (`id`,`username`,`password`) VALUES (1, 'test', '123456');

db.Model(User{
	Id: 1,
}).Update("username", "test2")  // 更新用户名为test2,相当于 update user set username="test2" where id = 1
    
db.Delete(&User{Id: 3})   // 删除id是1的用户,相当于delete from user where id = 3
// where 进行条件查询 
db.Where("username = ?", "test3").Delete(&User{}) // 相当于delete from user where username = "test3"

u := User{Id: 1}
db.First(&u)
fmt.Println(u) // 查询id是1的用户,只查一条  select * from user where id = 1 limit 1;

users := []User{}
db.Find(&users)
fmt.Println(users)  // 查询user表下的所有书籍, select * from user;

}

2项目中应用

我所做的是 extra apis - II 关注操作

2.1表结构

type Follow struct {
gorm.Model
UserID       uint   `gorm:"ForeignKey:UserID;AssociationForeignKey:Id"`
FollowList   string `gorm:"DEFAULT:''"`
FollowerList string `gorm:"DEFAULT:''"`
}

gorm.Model 会自动创建一个唯一的ID
UserID 是用户的ID,用来标识用户 FollowList 是本用户关注的用户ID集合 连接成字符串进行储存,通过 #id# 来进行分割
FollowerList 是本用户的粉丝的ID集合 连接成字符串进行储存,通过 #id# 来进行分割

2.2关注和取消关注

2.2.1关注

就是把要关注的ID储存到自身的 关注列表FollowList字段中
把本身ID 存放到 要关注的ID的 粉丝列表FollowerList字段中

2.2.2取消关注

与之相反