gin博客项目复盘--02数据库的搭建

100 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

数据库的搭建

我们在项目中通过使用 gorm 来连接数据库,进行CURD操作。
gorm 文档地址 : gorm.io/zh_CN/docs/

  1. 安装:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

特别注意:gorm 原来的版本已经废弃,新版本进行了迁移,地址:gorm.io/。本节主要讲解新版本。

  1. 写模型

我们在在 model 中建立三个模型及一个 db入口文件:

  • 常用的字段(id,createdat等):使用 gorm.Model 结构体
  • 使用 gorm:"type:varchar(10);not null;default:''" 来约束字段
  • 外键:主键表字段 主键表 gorm:"forigenkey:外键表字段" 来设置

  1. db 入口文件

model/db.go

package model

import (
	"fmt"
	"ginVue3blog/utils"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"os"
	"time"
)

var (
	db  *gorm.DB
	err error
)

func InitDb() {
	dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		utils.DbUser,
		utils.DbPassWord,
		utils.DbHost,
		utils.DbPort,
		utils.DbName,
	)
	db, err = gorm.Open(mysql.Open(dns), &gorm.Config{
		// gorm日志模式:silent
		Logger: logger.Default.LogMode(logger.Silent),
		// 外键约束
		DisableForeignKeyConstraintWhenMigrating: true,
		// 禁用默认事务(提高运行速度)
		SkipDefaultTransaction: true,
		NamingStrategy: schema.NamingStrategy{
			// 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
			SingularTable: true,
		},
	})

	if err != nil {
		fmt.Println("连接数据库失败,请检查参数:", err)
		os.Exit(1)
	} else {
		fmt.Println("连接数据库成功")
	}

	// 迁移数据表,在没有数据表结构变更时候,建议注释不执行
	_ = db.AutoMigrate(&User{}, &Article{}, &Category{})

	sqlDB, _ := db.DB()
	// SetMaxIdleCons 设置连接池中的最大闲置连接数。
	sqlDB.SetMaxIdleConns(10)

	// SetMaxOpenCons 设置数据库的最大连接数量。
	sqlDB.SetMaxOpenConns(100)

	// SetConnMaxLifetiment 设置连接的最大可复用时间。 不能大于gin框架的timeout时间
	sqlDB.SetConnMaxLifetime(10 * time.Second)
}
  1. 最后在 main.go 函数中调用数据库初始化
//...
model.InitDb()
//...