|
| 1 | +package initialize |
| 2 | + |
| 3 | +import ( |
| 4 | + "gin-vue-admin/global" |
| 5 | + "go.uber.org/zap" |
| 6 | + "gorm.io/driver/mysql" |
| 7 | + "gorm.io/driver/postgres" |
| 8 | + "gorm.io/driver/sqlite" |
| 9 | + "gorm.io/driver/sqlserver" |
| 10 | + "gorm.io/gorm" |
| 11 | + "gorm.io/gorm/logger" |
| 12 | + "os" |
| 13 | +) |
| 14 | + |
| 15 | +// Gorm 初始化数据库并产生数据库全局变量 |
| 16 | +func Gorm() { |
| 17 | + switch global.GVA_CONFIG.System.DbType { |
| 18 | + case "mysql": |
| 19 | + GormMysql() |
| 20 | + case "postgresql": |
| 21 | + GormPostgreSql() |
| 22 | + case "sqlite": |
| 23 | + GormSqlite() |
| 24 | + case "sqlserver": |
| 25 | + GormSqlServer() |
| 26 | + } |
| 27 | +} |
| 28 | + |
| 29 | +// GormMysql 初始化Mysql数据库 |
| 30 | +func GormMysql() { |
| 31 | + m := global.GVA_CONFIG.Mysql |
| 32 | + dsn := m.Username + ":" + m.Password + "@(" + m.Path + ")/" + m.Dbname + "?" + m.Config |
| 33 | + mysqlConfig := mysql.Config{ |
| 34 | + DSN: dsn, // DSN data source name |
| 35 | + DefaultStringSize: 191, // string 类型字段的默认长度 |
| 36 | + DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 |
| 37 | + DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 |
| 38 | + DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 |
| 39 | + SkipInitializeWithVersion: false, // 根据版本自动配置 |
| 40 | + } |
| 41 | + gormConfig := config(m.LogMode) |
| 42 | + if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil { |
| 43 | + global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err)) |
| 44 | + os.Exit(0) |
| 45 | + } else { |
| 46 | + global.GVA_DB = db |
| 47 | + sqlDB, _ := db.DB() |
| 48 | + sqlDB.SetMaxIdleConns(m.MaxIdleConns) |
| 49 | + sqlDB.SetMaxOpenConns(m.MaxOpenConns) |
| 50 | + } |
| 51 | +} |
| 52 | + |
| 53 | +// GormPostgreSql 初始化PostgreSql数据库 |
| 54 | +func GormPostgreSql() { |
| 55 | + p := global.GVA_CONFIG.Postgresql |
| 56 | + dsn := "user=" + p.Username + " password=" + p.Password + " dbname=" + p.Dbname + " port=" + p.Port + " " + p.Config |
| 57 | + postgresConfig := postgres.Config{ |
| 58 | + DSN: dsn, // DSN data source name |
| 59 | + PreferSimpleProtocol: p.PreferSimpleProtocol, // 禁用隐式 prepared statement |
| 60 | + } |
| 61 | + gormConfig := config(p.Logger) |
| 62 | + if db, err := gorm.Open(postgres.New(postgresConfig), gormConfig); err != nil { |
| 63 | + global.GVA_LOG.Error("PostgreSql启动异常", zap.Any("err", err)) |
| 64 | + os.Exit(0) |
| 65 | + } else { |
| 66 | + global.GVA_DB = db |
| 67 | + sqlDB, _ := db.DB() |
| 68 | + sqlDB.SetMaxIdleConns(p.MaxIdleConns) |
| 69 | + sqlDB.SetMaxOpenConns(p.MaxOpenConns) |
| 70 | + } |
| 71 | +} |
| 72 | + |
| 73 | +// GormSqlite 初始化Sqlite数据库 |
| 74 | +func GormSqlite() { |
| 75 | + s := global.GVA_CONFIG.Sqlite |
| 76 | + gormConfig := config(s.Logger) |
| 77 | + if db, err := gorm.Open(sqlite.Open(s.Path), gormConfig); err != nil { |
| 78 | + global.GVA_LOG.Error("Sqlite启动异常", zap.Any("err", err)) |
| 79 | + os.Exit(0) |
| 80 | + } else { |
| 81 | + global.GVA_DB = db |
| 82 | + sqlDB, _ := db.DB() |
| 83 | + sqlDB.SetMaxIdleConns(s.MaxIdleConns) |
| 84 | + sqlDB.SetMaxOpenConns(s.MaxOpenConns) |
| 85 | + } |
| 86 | +} |
| 87 | + |
| 88 | +// GormSqlite 初始化Sqlite数据库 |
| 89 | +func GormSqlServer() { |
| 90 | + ss := global.GVA_CONFIG.Sqlserver |
| 91 | + dsn := "sqlserver://" + ss.Username + ":" + ss.Password + "@" + ss.Path + "?database=gorm" |
| 92 | + if db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}); err != nil { |
| 93 | + global.GVA_LOG.Error("SqlServer启动异常", zap.Any("err", err)) |
| 94 | + os.Exit(0) |
| 95 | + } else { |
| 96 | + global.GVA_DB = db |
| 97 | + sqlDB, _ := db.DB() |
| 98 | + sqlDB.SetMaxIdleConns(ss.MaxIdleConns) |
| 99 | + sqlDB.SetMaxOpenConns(ss.MaxOpenConns) |
| 100 | + } |
| 101 | +} |
| 102 | + |
| 103 | +// config 根据配置决定是否开启日志 |
| 104 | +func config(mod bool) (c *gorm.Config) { |
| 105 | + if mod { |
| 106 | + c = &gorm.Config{ |
| 107 | + Logger: logger.Default.LogMode(logger.Info), |
| 108 | + DisableForeignKeyConstraintWhenMigrating: true, |
| 109 | + } |
| 110 | + } else { |
| 111 | + c = &gorm.Config{ |
| 112 | + Logger: logger.Default.LogMode(logger.Silent), |
| 113 | + DisableForeignKeyConstraintWhenMigrating: true, |
| 114 | + } |
| 115 | + } |
| 116 | + return |
| 117 | +} |
0 commit comments