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

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

我们在项目中通过使用 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入口文件:

image.png

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

image.png

  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()
//...


相关文章
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
9月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
354 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
9月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
428 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
10月前
|
数据管理 数据库 数据安全/隐私保护
Django—同一项目不同app使用不同数据库
在Django项目中实现不同app使用不同数据库的配置,可以通过配置多数据库、创建数据库路由和配置路由来实现。通过这种方法,可以有效地将数据隔离到不同的数据库,提高数据管理的灵活性和系统的可扩展性。希望本文能为开发者在Django项目中使用多数据库提供清晰的指导。
245 4
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
262 11
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
126 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

热门文章

最新文章