From 6db061531c383115e438fc1ada0c56f6b6cdab3f Mon Sep 17 00:00:00 2001 From: SliverHorn <503551462@qq.com> Date: Wed, 9 Sep 2020 14:48:33 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E4=BA=86Gorm=E7=9A=84v1.20.0?= =?UTF-8?q?=E7=89=88=E6=9C=AC,=E8=BF=81=E7=A7=BB=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E6=B3=A8=E5=86=8C=E5=87=BD=E6=95=B0=E8=87=B3?= =?UTF-8?q?gorm.go=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BA=86=E4=BB=A3=E7=A0=81,?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BA=86sqlite=E7=9A=84=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96,=E9=9C=80=E8=A6=81=E7=9A=84=E8=87=AA=E8=A1=8C?= =?UTF-8?q?=E6=89=93=E5=BC=80=E6=B3=A8=E9=87=8A,=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=BD=BF=E7=94=A8mysql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/go.mod | 3 +- server/initialize/db_table.go | 36 --------------- server/initialize/gorm.go | 83 +++++++++++++++++++++++------------ server/initialize/mysql.go | 45 ------------------- server/initialize/sqlite.go | 23 ---------- server/main.go | 1 - 6 files changed, 58 insertions(+), 133 deletions(-) delete mode 100644 server/initialize/db_table.go delete mode 100644 server/initialize/mysql.go delete mode 100644 server/initialize/sqlite.go diff --git a/server/go.mod b/server/go.mod index 143a7a35..fb1311ed 100644 --- a/server/go.mod +++ b/server/go.mod @@ -41,6 +41,7 @@ require ( github.com/tebeka/strftime v0.1.3 // indirect github.com/unrolled/secure v1.0.7 go.uber.org/zap v1.10.0 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect google.golang.org/protobuf v1.24.0 // indirect @@ -50,5 +51,5 @@ require ( gorm.io/driver/postgres v0.2.6 gorm.io/driver/sqlite v1.1.1 gorm.io/driver/sqlserver v0.2.4 - gorm.io/gorm v0.2.35 + gorm.io/gorm v1.20.0 ) diff --git a/server/initialize/db_table.go b/server/initialize/db_table.go deleted file mode 100644 index f694c216..00000000 --- a/server/initialize/db_table.go +++ /dev/null @@ -1,36 +0,0 @@ -package initialize - -import ( - "gin-vue-admin/global" - "gin-vue-admin/model" - "go.uber.org/zap" - "os" -) - -// 注册数据库表专用 -func DBTables() { - db := global.GVA_DB - err := db.AutoMigrate( - model.SysUser{}, - model.SysAuthority{}, - model.SysApi{}, - model.SysBaseMenu{}, - model.SysBaseMenuParameter{}, - model.JwtBlacklist{}, - model.SysWorkflow{}, - model.SysWorkflowStepInfo{}, - model.SysDictionary{}, - model.SysDictionaryDetail{}, - model.ExaFileUploadAndDownload{}, - model.ExaFile{}, - model.ExaFileChunk{}, - model.ExaSimpleUploader{}, - model.ExaCustomer{}, - model.SysOperationRecord{}, - ) - if err != nil { - global.GVA_LOG.Error("register table failed", zap.Any("err", err)) - os.Exit(0) - } - global.GVA_LOG.Debug("register table success") -} diff --git a/server/initialize/gorm.go b/server/initialize/gorm.go index 7dce551a..eb356a48 100644 --- a/server/initialize/gorm.go +++ b/server/initialize/gorm.go @@ -2,16 +2,18 @@ package initialize import ( "gin-vue-admin/global" + "gin-vue-admin/model" "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/driver/postgres" - "gorm.io/driver/sqlite" "gorm.io/driver/sqlserver" "gorm.io/gorm" "gorm.io/gorm/logger" "os" ) +var err error + // Gorm 初始化数据库并产生数据库全局变量 func Gorm() { switch global.GVA_CONFIG.System.DbType { @@ -19,17 +21,44 @@ func Gorm() { GormMysql() case "postgresql": GormPostgreSql() - case "sqlite": - GormSqlite() + //case "sqlite": // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可 + // GormSqlite() case "sqlserver": GormSqlServer() } } +// GormDBTables 注册数据库表专用 +func GormDBTables(db *gorm.DB) { + err := db.AutoMigrate( + model.SysUser{}, + model.SysAuthority{}, + model.SysApi{}, + model.SysBaseMenu{}, + model.SysBaseMenuParameter{}, + model.JwtBlacklist{}, + model.SysWorkflow{}, + model.SysWorkflowStepInfo{}, + model.SysDictionary{}, + model.SysDictionaryDetail{}, + model.ExaFileUploadAndDownload{}, + model.ExaFile{}, + model.ExaFileChunk{}, + model.ExaSimpleUploader{}, + model.ExaCustomer{}, + model.SysOperationRecord{}, + ) + if err != nil { + global.GVA_LOG.Error("register table failed", zap.Any("err", err)) + os.Exit(0) + } + global.GVA_LOG.Debug("register table success") +} + // GormMysql 初始化Mysql数据库 func GormMysql() { m := global.GVA_CONFIG.Mysql - dsn := m.Username + ":" + m.Password + "@(" + m.Path + ")/" + m.Dbname + "?" + m.Config + dsn := m.Username + ":" + m.Password + "@tcp(" + m.Path + ")/" + m.Dbname + "?" + m.Config mysqlConfig := mysql.Config{ DSN: dsn, // DSN data source name DefaultStringSize: 191, // string 类型字段的默认长度 @@ -39,12 +68,12 @@ func GormMysql() { SkipInitializeWithVersion: false, // 根据版本自动配置 } gormConfig := config(m.LogMode) - if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil { + if global.GVA_DB, err = gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil { global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err)) os.Exit(0) } else { - global.GVA_DB = db - sqlDB, _ := db.DB() + GormDBTables(global.GVA_DB) + sqlDB, _ := global.GVA_DB.DB() sqlDB.SetMaxIdleConns(m.MaxIdleConns) sqlDB.SetMaxOpenConns(m.MaxOpenConns) } @@ -59,42 +88,42 @@ func GormPostgreSql() { PreferSimpleProtocol: p.PreferSimpleProtocol, // 禁用隐式 prepared statement } gormConfig := config(p.Logger) - if db, err := gorm.Open(postgres.New(postgresConfig), gormConfig); err != nil { + if global.GVA_DB, err = gorm.Open(postgres.New(postgresConfig), gormConfig); err != nil { global.GVA_LOG.Error("PostgreSql启动异常", zap.Any("err", err)) os.Exit(0) } else { - global.GVA_DB = db - sqlDB, _ := db.DB() + GormDBTables(global.GVA_DB) + sqlDB, _ := global.GVA_DB.DB() sqlDB.SetMaxIdleConns(p.MaxIdleConns) sqlDB.SetMaxOpenConns(p.MaxOpenConns) } } -// GormSqlite 初始化Sqlite数据库 -func GormSqlite() { - s := global.GVA_CONFIG.Sqlite - gormConfig := config(s.Logger) - if db, err := gorm.Open(sqlite.Open(s.Path), gormConfig); err != nil { - global.GVA_LOG.Error("Sqlite启动异常", zap.Any("err", err)) - os.Exit(0) - } else { - global.GVA_DB = db - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(s.MaxIdleConns) - sqlDB.SetMaxOpenConns(s.MaxOpenConns) - } -} +// GormSqlite 初始化Sqlite数据库 sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可 +//func GormSqlite() { +// s := global.GVA_CONFIG.Sqlite +// gormConfig := config(s.Logger) +// if global.GVA_DB, err = gorm.Open(sqlite.Open(s.Path), gormConfig); err != nil { +// global.GVA_LOG.Error("Sqlite启动异常", zap.Any("err", err)) +// os.Exit(0) +// } else { +// GormDBTables(global.GVA_DB) +// sqlDB, _ := global.GVA_DB.DB() +// sqlDB.SetMaxIdleConns(s.MaxIdleConns) +// sqlDB.SetMaxOpenConns(s.MaxOpenConns) +// } +//} // GormSqlite 初始化Sqlite数据库 func GormSqlServer() { ss := global.GVA_CONFIG.Sqlserver dsn := "sqlserver://" + ss.Username + ":" + ss.Password + "@" + ss.Path + "?database=gorm" - if db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}); err != nil { + if global.GVA_DB, err = gorm.Open(sqlserver.Open(dsn), &gorm.Config{}); err != nil { global.GVA_LOG.Error("SqlServer启动异常", zap.Any("err", err)) os.Exit(0) } else { - global.GVA_DB = db - sqlDB, _ := db.DB() + GormDBTables(global.GVA_DB) + sqlDB, _ := global.GVA_DB.DB() sqlDB.SetMaxIdleConns(ss.MaxIdleConns) sqlDB.SetMaxOpenConns(ss.MaxOpenConns) } diff --git a/server/initialize/mysql.go b/server/initialize/mysql.go deleted file mode 100644 index 83f52a10..00000000 --- a/server/initialize/mysql.go +++ /dev/null @@ -1,45 +0,0 @@ -package initialize - -import ( - "gin-vue-admin/global" - "go.uber.org/zap" - "gorm.io/driver/mysql" - "gorm.io/gorm" - "gorm.io/gorm/logger" - "os" -) - -// 初始化数据库并产生数据库全局变量 -func Mysql() { - admin := global.GVA_CONFIG.Mysql - mysqlConfig := mysql.Config{ - DSN: admin.Username + ":" + admin.Password + "@(" + admin.Path + ")/" + admin.Dbname + "?" + admin.Config, // DSN data source name - DefaultStringSize: 191, // string 类型字段的默认长度 - DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 - DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 - DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 - SkipInitializeWithVersion: false, // 根据版本自动配置 - } - var gormConfig *gorm.Config - if admin.LogMode { //根据配置决定是否开启日志 - gormConfig = &gorm.Config{ - Logger: logger.Default.LogMode(logger.Info), - DisableForeignKeyConstraintWhenMigrating: true, - } - } else { - gormConfig = &gorm.Config{ - Logger: logger.Default.LogMode(logger.Silent), - DisableForeignKeyConstraintWhenMigrating: true, - } - } - - if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil { - global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err)) - os.Exit(0) - } else { - global.GVA_DB = db - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(admin.MaxIdleConns) - sqlDB.SetMaxOpenConns(admin.MaxOpenConns) - } -} diff --git a/server/initialize/sqlite.go b/server/initialize/sqlite.go deleted file mode 100644 index 3879da6f..00000000 --- a/server/initialize/sqlite.go +++ /dev/null @@ -1,23 +0,0 @@ -package initialize - -// sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可 - -// 感谢 sqlitet提供者 [rikugun] 作者github: https://github.com/rikugun - -// import ( -// "fmt" -// "gin-vue-admin/global" -// "gorm.io/gorm" -// _ "github.com/jinzhu/gorm/dialects/sqlite" -// ) -// -// // 初始化数据库并产生数据库全局变量 -// func Sqlite() { -// admin := global.GVA_CONFIG.Sqlite -// if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil { -// global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err) -// } else { -// global.GVA_DB = db -// global.GVA_DB.LogMode(admin.LogMode) -// } -// } diff --git a/server/main.go b/server/main.go index e3d1d9dc..ce88bebd 100644 --- a/server/main.go +++ b/server/main.go @@ -16,7 +16,6 @@ import ( // @BasePath / func main() { initialize.Gorm() - initialize.DBTables() if global.GVA_CONFIG.System.NeedInitData { init_data.InitData() // 通过配置文件初始化数据 默认为 false 首次运行需要将 ./config.yaml中 system下的 need-init-data 修改为true }