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