package db import ( "database/sql" "errors" "sync" "github.com/GoAdminGroup/go-admin/modules/config" "xorm.io/xorm" ) // Base is a common Connection. type Base struct { DbList map[string]*sql.DB Once sync.Once Configs config.DatabaseList } // Close implements the method Connection.Close. func (db *Base) Close() []error { errs := make([]error, 0) for _, d := range db.DbList { errs = append(errs, d.Close()) } return errs } // GetDB implements the method Connection.GetDB. func (db *Base) GetDB(key string) *sql.DB { return db.DbList[key] } func (db *Base) CreateDB(name string, beans ...interface{}) error { cfg := db.GetConfig(name) if cfg.Driver == "" { return errors.New("wrong connection name") } engine, err := xorm.NewEngine(cfg.Driver, cfg.GetDSN()) if err != nil { return err } defer func() { _ = engine.Close() }() err = engine.Sync(beans...) if err != nil { return err } return nil } func (db *Base) GetConfig(name string) config.Database { return db.Configs[name] }