gorm-plus
gorm-plus copied to clipboard
support multiple gorm
We need to connect to multiple databases in our project, but gplus's gorm as a global variable. can gplus support multi gorm??
Good idea, we can add it later, or if you're interested, you can submit pr
æä»¬éè¦è¿æ¥å°é¡¹ç®ä¸çå¤ä¸ªæ°æ®åºï¼ä½ gplus ç gorm æ¯ä¸ä¸ªå ¨å±åéã gplus å¯ä»¥æ¯æ multi gorm åï¼
è¿ä¸ªä¼¼ä¹åplus没æå¤ªå¤§çå ³ç³»æåäºä¸ªæ¹æ³å¨æéè¦çå°æ¹èªå·±å»åæ¢æ°æ®æºãç±»ä¼¼è¿æ ·ï¼ var gormDb *gorm.DB var gormDbMap = make(map[string]*gorm.DB)
func DbChange(tag string){ // gplusçè¿æ¥çæ°æ®åº gormDb := gormDbMap[tag] gplus.Init(gormDb) } func DbInit(tag string,url string) { var err error gormDb, err = gorm.Open(mysql.Open(url+"?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), NamingStrategy: schema.NamingStrategy{ TablePrefix: "", // æ°æ®åºè¡¨åç¼ SingularTable: true, // ä¸ç¨ç»è¡¨åå 夿° NoLowerCase: false, // è¦ä¸è¦æè¡¨åå ¨å°å }, // Logger: logger.Discard, // ä¸è¾åºæ¥å¿ }) if err != nil { log.Println(err) } gormDbMap[tag] = gormDb }
In actual projects, multiple data sources must be used concurrently at the same time, so the value of global variables cannot be switched through one method.
We can provide API of gplus through the methods of an object, and then distinguish different data sources through the attribute values of the object.
For example:
gorm1Db, _ = gorm.Open()
gorm2Db, _ = gorm.Open()
gplus1Db = gplus.New(gorm1Db)
gplus2Db = gplus.New(gorm2Db)
users1, resultDb := gplus1Db.SelectList[User](nil)
users2, resultDb := gplus2Db.SelectList[User](nil)
However, this will change the API of gplus.
For example:
gorm1Db, _ = gorm.Open() gorm2Db, _ = gorm.Open() gplus1Db = gplus.New(gorm1Db) gplus2Db = gplus.New(gorm2Db) users1, resultDb := gplus1Db.SelectList[User](nil) users2, resultDb := gplus2Db.SelectList[User](nil)
So far, go doesn't support generic methods.