2.gin-gorm数据库准备

2023-02-13 00:00:02

技术


通过gin-gorm之项目学习部分的学习,可以对项目的架构有深入的了解 🤟 {% post_link "gin-gorm1项目准备初始化" %}
{% post_link "gin-gorm2数据库" %}
{% post_link "gin-gorm3错误处理与路由接口" %}
{% post_link "gin-gorm4用户模块接口编写" %}
{% post_link "gin-gorm5密码加密" %}
{% post_link "gin-gorm6编辑、删除用户" %}


安装Gorm

安装gorm 现在是v2版本

go get -u gorm.io/gorm

注意除了gorm外还需要有数据库驱动,本人使用的是postgresql,使用其他数据库的请参考官网

import "gorm.io/driver/postgres"

然后根据提示导入,或者运行go mod tidy,该命令能够导入所有依赖的库并删除多余的库

数据模型

在model文件夹下建立数据库入口文件 db.go

// 全局变量,db和error在其他文件里也需要使用
var (
    db  *gorm.DB
    err error
)
func InitDb() {
    //使用占位符,然后用setting.go里的配置参数来替代
    dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Shanghai",
        utils.DbHost,
        utils.DbUser,
        utils.DbPassword,
        utils.DbName,
        utils.DbPort,
    )
    db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
        //禁用默认表名的复数形式
        NamingStrategy: schema.NamingStrategy{SingularTable: true},
    })
    if err != nil {
        fmt.Println("数据库连接失败,请检查连接参数", err)

    }

    //

    //数据库自动迁移,括号内的参数为需要构建的数据模型结构体
    db.AutoMigrate()

    sqlDB, err := db.DB()
    if err != nil {
        fmt.Println("数据库连接设置出错,请检查连接参数", err)
    }
    // SetMaxIdleConns 设置空闲连接池中连接的最大数量
    sqlDB.SetMaxIdleConns(10)

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

    // SetConnMaxLifetime 设置了连接可复用的最大时间。
    //不能超过 gin 框架的连接超时时间
    sqlDB.SetConnMaxLifetime(10 * time.Second)

    //sqlDB.Close()
}

在model文件夹下建立数据模型文件 User.go 、Article.go 、Category.go 创建结构体

type User struct {
    gorm.Model

    Username string `gorm:"type:varchar(20);not null " json:"username"`
    Password string `gorm:"type:varchar(20);not null " json:"password"`
    Role     int    `gorm:"type:int; " json:"role"`
}

type Category struct {
    gorm.Model

    Name string `gorm:"type:varchar(20);not null " json:"name"`
}

type Article struct {
    gorm.Model
    Title       string   `gorm:"type:varchar(20);not null" json:"title"`
    Category    Category 
    CategoryId  int      `gorm:"type:int;not null" json:"category_id"`
    Description string   `gorm:"type:varchar(200)" json:"description"`
    Content     string   `gorm:"type:text" json:"content"`
    Img         string   `gorm:"type:varchar(200)" json:"img"`
}

用数据库迁移创建数据表

回到数据库入口文件 db.go,使用创建的结构体

//数据库自动迁移
    db.AutoMigrate(&User{}, &Category{}, &Article{})

最后在main.go中使用数据库初始化函数InitDb()

model.InitDb()

运行项目main.go,能够看到数据库根据model建立了数据表,数据库连接工具库本人使用的是DBeaver