本篇文章主要介绍如何使用 GORM 连接 MySQL 数据库并执行增删改查操作,以在极简版抖音项目中的实际应用为例。在使用时,主要有以下几个步骤:
- 安装 GORM:首先,需要在你的Go 项目中安装 GORM。可以使用以下命令来安装 GORM:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
- 导入所需的包:在你的 Go 代码文件中,导入 GORM 和 MySQL 驱动程序的包:
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
- 连接到 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)
}
- 定义模型结构:在 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:""`
}
- 进行数据库迁移:在你的应用程序中,你可以使用 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)
}
- 执行增删改查操作:使用 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 的功能和方法。