package model import ( "fmt" "gitee.com/codinl/erp_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:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", config.ConfigValue.MysqlUser, config.ConfigValue.MysqlPassword, config.ConfigValue.MysqlHost, config.ConfigValue.MysqlPort, config.ConfigValue.MysqlDBName) DB, err = gorm.Open(config.ConfigValue.MysqlDriver, dialect) if err != nil { logger.Info("Connect Database Error:", err) panic(err) } DB.DB().SetMaxOpenConns(1000) DB.DB().SetMaxIdleConns(500) DB.DB().SetConnMaxLifetime(time.Second * 10) DB.LogMode(true) DB.SingularTable(true) if err := DB.DB().Ping(); err != nil { logger.Info("Ping Database Fail:", err) panic(err) } fmt.Println("DB init success") logger.Info("DB init success") } 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{}) { } 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:", err) } }