package boot import ( "fmt" "gxt-api-frame/app/model" "gxt-api-frame/app/model/entity" iModel "gxt-api-frame/app/model/impl/model" "gxt-api-frame/library/logger" "gxt-api-frame/library/utils" "time" "go.uber.org/dig" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" ) // 初始化gorm func initGorm() (*gorm.DB, error) { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", utils.GetConfig("mysql.user").String(), utils.GetConfig("mysql.password").String(), utils.GetConfig("mysql.host").String(), utils.GetConfig("mysql.port").Int(), utils.GetConfig("mysql.db_name").String(), utils.GetConfig("mysql.parameters").String()) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ SkipDefaultTransaction: true, // 跳过默认事务 NamingStrategy: schema.NamingStrategy{ TablePrefix: utils.GetConfig("gorm.table_prefix").String(), SingularTable: true, // 使用单数表名 }, }) if err != nil { return nil, err } db.Logger = logger.NewEntry(logger.GetLogger()) if utils.GetConfig("common.run_mode").String() == "debug" { db.Debug() } sqlDb, err := db.DB() if err != nil { return nil, err } sqlDb.SetMaxIdleConns(utils.GetConfig("gorm.max_idle_conns").Int()) sqlDb.SetMaxOpenConns(utils.GetConfig("gorm.max_open_conns").Int()) sqlDb.SetConnMaxLifetime(time.Duration(utils.GetConfig("gorm.max_open_conns").Int()) * time.Second) return db, nil } // 自动创建数据表映射 func autoMigrate(db *gorm.DB) error { return db.AutoMigrate( new(entity.Demo), ) } func InjectModel(container *dig.Container) error { _ = container.Provide(iModel.NewTrans) _ = container.Provide(func(m *iModel.Trans) model.ITrans { return m }) _ = container.Provide(iModel.NewDemo) _ = container.Provide(func(m *iModel.Demo) model.IDemo { return m }) return nil }