GORM简单实战 | 青训营

67 阅读2分钟

本篇文章主要介绍如何使用 GORM 连接 MySQL 数据库并执行增删改查操作,以在极简版抖音项目中的实际应用为例。在使用时,主要有以下几个步骤:

  1. 安装 GORM:首先,需要在你的Go 项目中安装 GORM。可以使用以下命令来安装 GORM:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
  1. 导入所需的包:在你的 Go 代码文件中,导入 GORM 和 MySQL 驱动程序的包:
import (
    "gorm.io/gorm"
    "gorm.io/driver/mysql"
)
  1. 连接到 MySQL 数据库:使用 GORM 的 gorm.Open 函数连接到 MySQL 数据库。你需要提供数据库的连接信息,如用户名、密码、主机和数据库名称等:
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.DBUser,
		cfg.DBPassword,
		cfg.DBHost,
		cfg.DBPort,
		cfg.DBName)
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
        DisableForeignKeyConstraintWhenMigrating: true,
        SkipDefaultTransaction:                   true,
        NamingStrategy: schema.NamingStrategy{
                SingularTable: false,
        },
})
if err != nil {
        log.Println("database connect failed:", err)
        panic(err)
}
  1. 定义模型结构:在 GORM 中,你需要定义模型结构来映射数据库表。创建一个结构体,并使用 GORM 的 gorm.Tag 标签来指定字段与数据库表中的列的映射关系:
type Model struct {
	ID       uint64    `gorm:"comment:自增主键"`
	CreateAt time.Time `gorm:"type:timestamp;not null;default:current_timestamp()"`
	UpdateAt time.Time `gorm:"type:timestamp;not null;default:current_timestamp()"`
	gorm.DeletedAt
}

type Video struct {
	gorm.Model
	VideoID       int64  `gorm:"type:BIGINT;not null;UNIQUE" json:"video_id" validate:""`
	AuthorID      int64  `gorm:"type:BIGINT;not null;index:idx_author_id" json:"author_id" validate:""`
	FavoriteCount int32  `gorm:"type:INT;not null;default:0" json:"favorite_count" validate:""`
	CommentCount  int32  `gorm:"type:INT;not null;default:0" json:"comment_count" validate:""`
	PlayURL       string `gorm:"type:varchar(100);not null" json:"play_url" validate:""`
	CoverURL      string `gorm:"type:varchar(100);not null" json:"cover_url" validate:""`
}
  1. 进行数据库迁移:在你的应用程序中,你可以使用 GORM 的 AutoMigrate 函数来自动创建数据库表:
err = db.AutoMigrate(&datatype.Video{}, &datatype.User{}, &datatype.UserLogin{}, &datatype.Follow{}, &datatype.Comment{}, &datatype.Favorite{}) //TODO 数据库自动迁移
if err != nil {
        log.Println("database automigrate failed:", err)
        panic(err)
}
  1. 执行增删改查操作:使用 GORM 提供的方法来执行增删改查操作。以下是一些示例:
  • 创建记录:
func (*VideoDao) Create(cons map[string]interface{}) error {
	err := db.Model(&datatype.Video{}).Create(cons).Error
	if err != nil {
		log.Println("新增视频失败")
	}
	return err
}
  • 查询记录:
func (*VideoDao) QueryVideo(videoID int64, fields ...string) (datatype.Video, error) {
	var v datatype.Video
	err := db.Model(&datatype.Video{}).
		Select(fields).
		Where("video_id = ?", videoID).
		Error
	if err != nil {
		return datatype.Video{}, err
	}
	return v, nil
}
  • 更新记录:
func (*VideoDao) Update(video datatype.Video) error {
	return db.Model(&datatype.Video{}).Where("video_id=?", video.VideoID).Updates(&video).Error
}
  • 删除记录:
func (*CommentDao) Delete(commentID, userID int64) error {
	err := db.Model(&datatype.Comment{}).Delete(&datatype.Comment{}, commentID).Where("user_id = ?", userID).Error
	return err
}

以上是使用 GORM 连接 MySQL 数据库并执行增删改查操作的基本步骤,也可以根据自己的需求进一步探索 GORM 的功能和方法。