package model import ( "fmt" "mh-server/config" "time" "github.com/codinl/go-logger" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) var DB *gorm.DB func InitDB() { var err error dialect := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", config.AppConfig.DBUser, config.AppConfig.DBPassword, config.AppConfig.DBHost, config.AppConfig.DBPort, config.AppConfig.DBName) DB, err = gorm.Open(config.AppConfig.DBDriver, dialect) if err != nil { fmt.Println("Connect Database Error, error = ", err) logger.Info("Connect Database Error, error = ", err) panic(err) } DB.DB().SetMaxOpenConns(1000) DB.DB().SetMaxIdleConns(500) DB.DB().SetConnMaxLifetime(time.Second * 10) DB.LogMode(true) DB.SetLogger(DBLoggerWriter{}) DB.SingularTable(true) if err := DB.DB().Ping(); err != nil { fmt.Println("Ping Database Fail, error = ", err) logger.Info("Ping Database Fail, error = ", err) panic(err) } fmt.Println("DB init success") logger.Info("DB init success") //if config.AppConfig.Env == "dev" { // migrateTable(DB) //} } func CloseDB() { if DB != nil { if err := DB.Close(); err != nil { fmt.Println("DB Close err", err) logger.Error("DB Close err", err) } } } type DBLoggerWriter struct { gorm.LogWriter } func (DBLoggerWriter) Print(values ...interface{}) { //logger.Info(values...) } func TransactionBegin() *gorm.DB { return DB.Begin() } // Transaction 事务自动处理,如果有错误将回滚,否则将提交事务 func Transaction(tx *gorm.DB, err error) error { if err == nil { ret := tx.Commit() if ret.Error != nil { return ret.Error } return err } ret := tx.Rollback() if ret.Error != nil { return ret.Error } return nil } func initCreateTable() { if err := DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").AutoMigrate().Error; err != nil { logger.Info("AutoMigrate createTable Error, error = ", err) fmt.Println("AutoMigrate createTable err:", err) } } // 测试服务器 //func InitDBTest() { // var err error // // dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", // "mh_dev", "m5h4parZsXjbeiFh", "39.108.188.218", "3306", "mh_dev") // // db, err := gorm.Open("mysql", dialect) // if err != nil { // logger.Infof("Open DB error [%s] with dialect[%s]", err.Error(), dialect) // panic(err) // } // // if db.DB().Ping() != nil { // fmt.Printf("Ping DB fail: %#v", db.Error) // panic(err) // } // db.SingularTable(true) // // db.AutoMigrate( // &User{}, // //&LotteryInviteTargetUser{}, // &GameCard{}, // &Collection{}, // &Config{}, // &HistoryBrowsing{}, // &ShoppingCart{}, // &UserAddress{}, // &SearchHistory{}, // &Order{}, // &HotSearch{}, // &HomeCarousel{}, // &GameCardType{}, // &Store{}, // &GameType{}, // &UserOpenMemberRecord{}, // &CommonProblem{}, // &ExpressCompany{}, // &GameCardGoodsStock{}, // &GameCardGoods{}, // ) // // fmt.Println("DB init success") // DB = db // logger.Info("ok") //}