Gin框架系列教程(6)- 连接Mysql,集成Gorm库
本文主要是了解一下Gin框架如何链接MySQL并集成Gorm库的。当然ORM库有很多,虽然gorm库被很多人吐槽,但是并不能否认它很强大,很完善,用的人最多。当然你也可以用其他的库。
介绍:
Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了,Golang写的,GitHub上活跃度很高的orm库。
特点:
- 全功能ORM(几乎)
- 关联(包含一个,包含多个,属于,多对多,多种包含)
- Callbacks(创建/保存/更新/删除/查找之前/之后)
- 预加载(急加载)
- 事务
- 复合主键
- SQL Builder
- 自动迁移
- 日志
- 可扩展,编写基于GORM回调的插件
- 每个功能都有测试
- 开发人员友好
安装:
go get gorm.io/driver/mysql
go get gorm.io/gorm
链接MySQL,迁移数据库,我这里用的是viper解析yaml文档,配置数据库的信息(就直接展示代码):
链接并配置:
config.yaml
mysql:
db_username: "root"
db_password: "root"
db_database: "demo_database"
db_host: "127.0.0.1"
db_port: "3306"
logs:
log_level: "debug"
base.go
package models
import (
"time"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
var err error
func Init() {
//读取配置
viper.SetConfigFile("config/config.yaml")
errConfi := viper.ReadInConfig()
if errConfi != nil {
panic(errConfi)
}
db_username := viper.GetString("mysql.db_username")
db_password := viper.GetString("mysql.db_password")
db_database := viper.GetString("mysql.db_database")
db_host := viper.GetString("mysql.db_host")
db_port := viper.GetString("mysql.db_port")
DB, err = gorm.Open(mysql.New(mysql.Config{
DSN: db_username + ":" + db_password + "@tcp(" + db_host + ":" + db_port + ")/" + db_database + "?charset=utf8mb4&parseTime=True&loc=Local",
// DSN data source name
DefaultStringSize: 256,
// string 类型字段的默认长度
DisableDatetimePrecision: true,
// 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true,
// 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true,
// 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false,
// 根据当前 MySQL 版本自动配置
}), &gorm.Config{})
if err != nil {
panic(err)
}
//迁移数据库,上线之后去掉
DB.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}, &Article{}, &ArticleCategory{}, &Role{}, &Menus{})
sqlDB, _ := DB.DB()
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(100)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(50)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
}
模型下的一个User结构体,用于迁移数据库等:
package models
import (
"gorm.io/gorm"
)
type User struct {
gorm.Model
Mame string `json:"name" form:"name" gorm:"column:name;comment:姓名;type:varchar(10);"` //姓名
Account string `json:"account" form:"account" gorm:"column:account;comment:账号;type:varchar(10);"` //账号
Password string `json:"password" form:"password" gorm:"column:password;comment:密码;type:varchar(32);"` //密码
Email string `json:"email" form:"email" gorm:"column:email;comment:邮箱;type:varchar(300);"` //邮箱
Image string `json:"image" form:"image" gorm:"column:image;comment:头像;type:varchar(300);"` //头像
IsEnabled int64 `json:"is_enabled" form:"is_enabled" gorm:"column:is_enabled;comment:是否启用;type:smallint;default:1"` //是否启用
}
func (User) TableName() string {
return "users"
}
最后注册进程序主入口中:
// 数据库初始化
models.Init()
结构如下:
还没有评论,快来发表第一个评论吧