You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.3 KiB

3 years ago
package common
import (
"fmt"
"github.com/spf13/viper"
3 years ago
"github.com/zggsong/gin-vue-demo/model"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func InitDB() *gorm.DB {
3 years ago
// 配置 MySQL 连接参数
username := viper.GetString("datasource.username") // 账号
password := viper.GetString("datasource.password") // 密码
host := viper.GetString("datasource.host") // 数据库地址可以是Ip或者域名
port := viper.GetInt64("datasource.port") // 数据库端口
database := viper.GetString("datasource.database") // 数据库名
charset := viper.GetString("datasource.charset") // 字符集
3 years ago
// 拼接下 dsn 参数, dsn 格式可以参考上面的语法,这里使用 Sprintf 动态拼接 dsn 参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接 dsn。
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
3 years ago
username,
password,
host,
port,
database,
charset)
3 years ago
// 连接 Mysql, 获得 DB 类型实例,用于后面的数据库读写操作。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
db.AutoMigrate(&model.User{})
DB = db
return db
3 years ago
}
func GetDB() *gorm.DB {
return DB
}