github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/test/others/func/comm/dao.go (about) 1 package comm 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/easysoft/zendata/cmd/test/others/func/model" 8 "github.com/fatih/color" 9 "gorm.io/driver/mysql" 10 "gorm.io/gorm" 11 "gorm.io/gorm/logger" 12 "gorm.io/plugin/dbresolver" 13 ) 14 15 const ( 16 dbUser = "root" 17 dbUrl = "127.0.0.1:3306" 18 dbPasswd = "P2ssw0rd" 19 dbName = "zendata" 20 ) 21 22 var ( 23 DB *gorm.DB 24 ) 25 26 func GetDB() *gorm.DB { 27 if DB != nil { 28 return DB 29 } 30 31 DB = GormMySQL() 32 _ = DB.Use( 33 dbresolver.Register( 34 dbresolver.Config{}). 35 SetConnMaxIdleTime(time.Hour). 36 SetConnMaxLifetime(24 * time.Hour). 37 SetMaxIdleConns(100). 38 SetMaxOpenConns(200), 39 ) 40 41 DB.Session(&gorm.Session{FullSaveAssociations: true, AllowGlobalUpdate: false}) 42 43 err := DB.AutoMigrate( 44 &model.DataCategory1{}, 45 &model.DataCategory2{}, 46 47 &model.DataFood{}, 48 &model.DataAnimalPlant{}, 49 &model.DataAnimalPlant{}, 50 &model.DataFruit{}, 51 &model.DataConstellation{}, 52 &model.DataZodiac{}, 53 &model.EightDiagram{}, 54 &model.Dynasty{}, 55 &model.CarBrand{}, 56 &model.CarComponent{}, 57 58 &model.PcOs{}, 59 &model.PcFileExt{}, 60 61 &model.PhoneModel{}, 62 &model.Place{}, 63 &model.Song{}, 64 &model.Bank{}, 65 &model.Advert{}, 66 &model.IdiomSimple{}, 67 &model.PoetryAncient{}, 68 &model.PoetryCategory{}, 69 &model.Medicine{}, 70 &model.Joke{}, 71 72 &model.AreaCodeCity{}, 73 &model.AreaCodeCountry{}, 74 ) 75 if err != nil { 76 fmt.Printf(color.RedString("migrate models failed, error: %s.", err.Error())) 77 } 78 79 return DB 80 } 81 82 func GormMySQL() *gorm.DB { 83 dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?%s", dbUser, dbPasswd, dbUrl, dbName, "charset=utf8mb4&parseTime=True&loc=Local") 84 85 mysqlConfig := mysql.Config{ 86 DSN: dsn, // DSN data source name 87 DefaultStringSize: 191, // string 类型字段的默认长度 88 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 89 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 90 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 91 SkipInitializeWithVersion: false, // 根据版本自动配置 92 } 93 94 if db, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{ 95 Logger: logger.Default.LogMode(logger.Info), 96 }); err != nil { 97 return nil 98 } else { 99 sqlDB, _ := db.DB() 100 sqlDB.SetMaxIdleConns(0) 101 sqlDB.SetMaxOpenConns(0) 102 return db 103 } 104 }