我们在项目中通过使用 gorm 来连接数据库,进行CURD操作。
gorm 文档地址 : gorm.io/zh_CN/docs/
- 安装:
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql 复制代码
特别注意:gorm 原来的版本已经废弃,新版本进行了迁移,地址:gorm.io/。本节主要讲解新版本。
- 写模型
我们在在 model 中建立三个模型及一个 db入口文件:
- 常用的字段(id,createdat等):使用 gorm.Model 结构体
- 使用
gorm:"type:varchar(10);not null;default:''"
来约束字段 - 外键:主键表字段 主键表
gorm:"forigenkey:外键表字段"
来设置
- 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) } 复制代码
- 最后在 main.go 函数中调用数据库初始化
//... model.InitDb() //...