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.

74 lines
1.9 KiB

package global
import (
"WechatGateWay/handle"
"fmt"
"github.com/jinzhu/gorm"
"github.com/spf13/viper"
"log"
"net/url"
)
func InitDB() *gorm.DB {
driverName := "mysql"
host := viper.GetString("db.MySQLHOST")
port := viper.GetInt("db.MySQLPORT")
database := viper.GetString("db.MySQLDB")
username := viper.GetString("db.MySQLUSER")
password := viper.GetString("db.MySQLPASSWORD")
charset := viper.GetString("db.MySQLCharset")
loc := viper.GetString("db.MySQLLoc")
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true&loc=%s",
username,
password,
host,
port,
database,
charset,
url.QueryEscape(loc))
//dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(driverName, dsn)
//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err == nil {
log.Println("Connected to database")
//db.DB()实现一个连接池
//设置最大连接数和最大闲置数
//默认0表示不限制
db.DB().SetMaxIdleConns(0)
db.DB().SetMaxOpenConns(0)
//给默认表名加前缀
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
//return "admin_" + defaultTableName + "_test_env"
return "" + defaultTableName + ""
}
// 全局禁用表名复数
// 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响
// 如果设置为false,`User`的默认表名为`users`
db.SingularTable(false)
//打开sql日志
db.LogMode(viper.GetBool("db.GORMLog"))
//创建表时,添加后缀
db.Set("grom:table_options", "ENGINE=InnoDB")
//自动建表
db.AutoMigrate(&handle.WechatLog{})
DB = db
return db
} else {
log.Println("Connected to database failed")
//log.Println("failed to connect database, err: " + err.Error())
panic("failed to connect database, err: " + err.Error())
return nil
}
}