第9课实践-Gorm框架实现增删改查,以抖声项目为例|青训营

59 阅读3分钟

什么是Gorm

GORM 是 Go 语言中的一个强大的对象关系映射(ORM)库,它提供了一种简单且优雅的方式来进行数据库操作。ORM 是一种编程技术,它将数据库表与程序中的对象进行映射,使得开发者可以使用面向对象的方式进行数据库的增删改查操作,而无需直接编写 SQL 语句。

简单来说,通过Gorm框架,不需要使用SQL语句即可优雅实现与数据库的交互。

1. 导入Gorm包

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

在Goland中,直接点击同步依赖即可下载对应的依赖包,也可以通过go get命令行下载

2. 连接数据库

新建data文件夹,新建initdb.go文件用于连接数据库,提供数据库信息,并建立连接,代码如下:

package data

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

var Db *gorm.DB

func InitDb() {
	dsn := "root:@tcp(localhost:3306)/dousheng?charset=utf8mb4&parseTime=True&loc=Local" //数据库信息
	var err error
	Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ //启用日志输出,输出包含SQL查询语句
		Logger: logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		log.Fatal(err)
	}
	Db.AutoMigrate() //迁移数据库
}

dsn变量中包含了数据库信息,包括用户名@密码tcp(主机地址:端口号)/数据库名称?配置设置,包括时区等

3. 定义模型结构

在controller层下新建common.go文件,定义数据库表对应的结构体,以User表为例:

type User struct {
	Id              int64  `json:"id,omitempty"`
	Name            string `json:"name,omitempty"`
	Password        string `json:"password,omitempty"`
	FollowCount     int64  `json:"follow_count,omitempty"`
	FollowerCount   int64  `json:"follower_count,omitempty"`
	IsFollow        bool   `json:"is_follow,omitempty"`
	Avatar          string `json:"avatar,omitempty" gorm:"default:http://192.168.43.191:8080/static/avatar1.jpg"`       //用户头像
	BackgroundImage string `json:"background_image,omitempty" gorm:"default:http://192.168.43.191:8080/static/326.jpg"` //背景图片
	Signature       string `json:"signature,omitempty" gorm:"default:my signature hhh"`                                 //签名
	TotalFavorited  string `json:"total_favorited,omitempty"`
	WorkCount       int64  `json:"work_count,omitempty"`     //作品数
	FavoriteCount   int64  `json:"favorite_count,omitempty"` //喜欢数
}

定义了User结构体,包含多个字段,这些即是数据库表的表头

4. 创建表

下面可以使用 GORM 提供的自动迁移功能来创建表。只需调用 AutoMigrate 方法,并将模型作为参数传入:

db.AutoMigrate(&User{})

执行后将会在数据库中创建一个名为User的表,并自动添加与User结构体对应的字段

另一种创建表的方式是

func (User) TableName() string {
	return "user"
}

函数的返回值即为表名

5. 数据库的增删改查

现在一切都准备就绪了,可以对数据库进行操作了

以创建新用户为例

newUser := User{
	Name:     username,
	Password: password,
}
result := data.Db.Create(&newUser)

输入用户名和密码返回值创建新用户,并写入表中

db.Create(&newUser{Name: "zj", Password: "123456"})

可以创建zj新用户

func CreateUser(user *common.User) {
	newUser := User{
		Name:     username,
		Password: password,
	}
	db.Create(&newUser)
}

也可以用func函数创建新用户

有First和Find两种查询,First支持查找一个字段

var user User
db.First(&user, 1)  //根据整型主键查找
db.First(&user, "username = ?", "zj")   //查找username为zj的数据
func getUserByID(db *gorm.DB, id int) {
	var user User
	result := db.First(&user, id)
	return user
}
var users []User
db.Find(&users)   //通过Find查询数据库所有用户,并将结果储存在users变量中

var user User
db.First(&User)  //查询数据库中的第一个用户
user.password = 111111  //将其密码改为111111
db.Save(&user)  //调用save函数保存以上更改
db.Model(&user).Update(User{"Signature", "Good morning"}    //只能更新非零字段
db.Model(&user).Update(map[string]interface{}{"Signature", "Good morning"}   //使用map可以更新零字段

db.Delete(&user)
func deleteUser(db *gorm.DB, id uint) error {
    result := db.Delete(&User{}, id)
    return result.Error
}

上述两种方案均可以删掉某一用户数据,但请谨慎操作

总结

至此,Gorm框架的搭建,数据库连接以及与数据库交互的增删改查均完成实践。

首先导入gorm依赖,通过DSN连接数据库,定义结构体(模型/字段),创建表,然后就可以用create,first,find,update,delete函数进行数据库的增删改查了。