这是我参与「第三届青训营 -后端场」笔记创作活动的第 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取消关注
与之相反