Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
飞一样的人
gin-vue-admin
提交
1ab5c749
G
gin-vue-admin
项目概览
飞一样的人
/
gin-vue-admin
与 Fork 源项目一致
Fork自
FLIPPED-AURORA / gin-vue-admin
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gin-vue-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1ab5c749
编写于
9月 07, 2020
作者:
Sliver_Horn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成GORM的支持四个数据库的配置
上级
772bdabc
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
182 addition
and
22 deletion
+182
-22
server/config.yaml
server/config.yaml
+30
-5
server/config/config.go
server/config/config.go
+31
-8
server/go.mod
server/go.mod
+3
-1
server/initialize/gorm.go
server/initialize/gorm.go
+117
-0
server/main.go
server/main.go
+1
-8
未找到文件。
server/config.yaml
浏览文件 @
1ab5c749
...
@@ -19,11 +19,36 @@ mysql:
...
@@ -19,11 +19,36 @@ mysql:
max-open-conns
:
10
max-open-conns
:
10
log-mode
:
false
log-mode
:
false
#sqlite 配置
# Postgresql connect configuration
postgresql
:
username
:
'
gorm'
password
:
'
gorm'
db-name
:
'
gorm'
port
:
'
9920'
config
:
'
sslmode=disable
TimeZone=Asia/Shanghai'
max-idle-conns
:
10
max-open-conns
:
10
logger
:
false
prefer-simple-protocol
:
true
# sqlite connect configuration
# sqlite需要gcc支持 windows用户需要自行安装gcc
sqlite
:
sqlite
:
path
:
db.db
# path: 'file::memory:?cache=shared' # 内存模式
log-mode
:
true
path
:
'
db.db'
config
:
'
loc=Asia/Shanghai'
max-idle-conns
:
10
max-open-conns
:
10
logger
:
true
# Sqlserver connect configuration
sqlserver
:
username
:
'
gorm'
password
:
'
LoremIpsum86'
db-name
:
'
gorm'
path
:
'
localhost:9930'
max-idle-conns
:
10
max-open-conns
:
10
logger
:
true
# oss configuration
# oss configuration
...
@@ -51,7 +76,7 @@ system:
...
@@ -51,7 +76,7 @@ system:
use-multipoint
:
false
use-multipoint
:
false
env
:
'
public'
# Change to "develop" to skip authentication for development mode
env
:
'
public'
# Change to "develop" to skip authentication for development mode
addr
:
8888
addr
:
8888
db-type
:
"
mysql"
# support mysql/
sqlite
db-type
:
"
mysql"
# support mysql/
postgresql/sqlite/sqlserver
need-init-data
:
false
need-init-data
:
false
# captcha configuration
# captcha configuration
...
...
server/config/config.go
浏览文件 @
1ab5c749
...
@@ -2,7 +2,9 @@ package config
...
@@ -2,7 +2,9 @@ package config
type
Server
struct
{
type
Server
struct
{
Mysql
Mysql
`mapstructure:"mysql" json:"mysql" yaml:"mysql"`
Mysql
Mysql
`mapstructure:"mysql" json:"mysql" yaml:"mysql"`
Postgresql
Postgresql
`mapstructure:"postgresql" json:"postgresql" yaml:"postgresql"`
Sqlite
Sqlite
`mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
Sqlite
Sqlite
`mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
Sqlserver
Sqlserver
`mapstructure:"sqlserver" json:"sqlserver" yaml:"sqlserver"`
Qiniu
Qiniu
`mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`
Qiniu
Qiniu
`mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`
Casbin
Casbin
`mapstructure:"casbin" json:"casbin" yaml:"casbin"`
Casbin
Casbin
`mapstructure:"casbin" json:"casbin" yaml:"casbin"`
Redis
Redis
`mapstructure:"redis" json:"redis" yaml:"redis"`
Redis
Redis
`mapstructure:"redis" json:"redis" yaml:"redis"`
...
@@ -40,6 +42,35 @@ type Mysql struct {
...
@@ -40,6 +42,35 @@ type Mysql struct {
LogMode
bool
`mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
LogMode
bool
`mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
}
}
type
Postgresql
struct
{
Username
string
`mapstructure:"username" json:"username" yaml:"username"`
Password
string
`mapstructure:"password" json:"password" yaml:"password"`
Dbname
string
`mapstructure:"db-name" json:"dbname" yaml:"db-name"`
Port
string
`mapstructure:"port" json:"port" yaml:"port"`
Config
string
`mapstructure:"config" json:"config" yaml:"config"`
MaxIdleConns
int
`mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
MaxOpenConns
int
`mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
Logger
bool
`mapstructure:"logger" json:"logger" yaml:"logger"`
PreferSimpleProtocol
bool
`mapstructure:"prefer-simple-protocol" json:"preferSimpleProtocol" yaml:"prefer-simple-protocol"`
}
type
Sqlite
struct
{
Path
string
`mapstructure:"path" json:"path" yaml:"path"`
MaxIdleConns
int
`mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
MaxOpenConns
int
`mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
Logger
bool
`mapstructure:"logger" json:"logger" yaml:"logger"`
}
type
Sqlserver
struct
{
Username
string
`mapstructure:"username" json:"username" yaml:"username"`
Password
string
`mapstructure:"password" json:"password" yaml:"password"`
Path
string
`mapstructure:"path" json:"path" yaml:"path"`
Dbname
string
`mapstructure:"db-name" json:"dbname" yaml:"db-name"`
MaxIdleConns
int
`mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
MaxOpenConns
int
`mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
Logger
bool
`mapstructure:"logger" json:"logger" yaml:"logger"`
}
type
Redis
struct
{
type
Redis
struct
{
Addr
string
`mapstructure:"addr" json:"addr" yaml:"addr"`
Addr
string
`mapstructure:"addr" json:"addr" yaml:"addr"`
Password
string
`mapstructure:"password" json:"password" yaml:"password"`
Password
string
`mapstructure:"password" json:"password" yaml:"password"`
...
@@ -65,14 +96,6 @@ type Captcha struct {
...
@@ -65,14 +96,6 @@ type Captcha struct {
ImgHeight
int
`mapstructure:"img-height" json:"imgHeight" yaml:"img-height"`
ImgHeight
int
`mapstructure:"img-height" json:"imgHeight" yaml:"img-height"`
}
}
type
Sqlite
struct
{
Username
string
`mapstructure:"username" json:"username" yaml:"username"`
Password
string
`mapstructure:"password" json:"password" yaml:"password"`
Path
string
`mapstructure:"path" json:"path" yaml:"path"`
Config
string
`mapstructure:"config" json:"config" yaml:"config"`
LogMode
bool
`mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
}
type
Zap
struct
{
type
Zap
struct
{
Level
string
`mapstructure:"level" json:"level" yaml:"level"`
Level
string
`mapstructure:"level" json:"level" yaml:"level"`
Format
string
`mapstructure:"format" json:"format" yaml:"format"`
Format
string
`mapstructure:"format" json:"format" yaml:"format"`
...
...
server/go.mod
浏览文件 @
1ab5c749
...
@@ -41,12 +41,14 @@ require (
...
@@ -41,12 +41,14 @@ require (
github.com/tebeka/strftime v0.1.3 // indirect
github.com/tebeka/strftime v0.1.3 // indirect
github.com/unrolled/secure v1.0.7
github.com/unrolled/secure v1.0.7
go.uber.org/zap v1.10.0
go.uber.org/zap v1.10.0
golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect
golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect
google.golang.org/protobuf v1.24.0 // indirect
google.golang.org/protobuf v1.24.0 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gorm.io/driver/mysql v0.3.1
gorm.io/driver/mysql v0.3.1
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 v0.2.35
)
)
server/initialize/gorm.go
0 → 100644
浏览文件 @
1ab5c749
package
initialize
import
(
"gin-vue-admin/global"
"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"
)
// Gorm 初始化数据库并产生数据库全局变量
func
Gorm
()
{
switch
global
.
GVA_CONFIG
.
System
.
DbType
{
case
"mysql"
:
GormMysql
()
case
"postgresql"
:
GormPostgreSql
()
case
"sqlite"
:
GormSqlite
()
case
"sqlserver"
:
GormSqlServer
()
}
}
// GormMysql 初始化Mysql数据库
func
GormMysql
()
{
m
:=
global
.
GVA_CONFIG
.
Mysql
dsn
:=
m
.
Username
+
":"
+
m
.
Password
+
"@("
+
m
.
Path
+
")/"
+
m
.
Dbname
+
"?"
+
m
.
Config
mysqlConfig
:=
mysql
.
Config
{
DSN
:
dsn
,
// 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
,
// 根据版本自动配置
}
gormConfig
:=
config
(
m
.
LogMode
)
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
(
m
.
MaxIdleConns
)
sqlDB
.
SetMaxOpenConns
(
m
.
MaxOpenConns
)
}
}
// GormPostgreSql 初始化PostgreSql数据库
func
GormPostgreSql
()
{
p
:=
global
.
GVA_CONFIG
.
Postgresql
dsn
:=
"user="
+
p
.
Username
+
" password="
+
p
.
Password
+
" dbname="
+
p
.
Dbname
+
" port="
+
p
.
Port
+
" "
+
p
.
Config
postgresConfig
:=
postgres
.
Config
{
DSN
:
dsn
,
// DSN data source name
PreferSimpleProtocol
:
p
.
PreferSimpleProtocol
,
// 禁用隐式 prepared statement
}
gormConfig
:=
config
(
p
.
Logger
)
if
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
()
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数据库
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
{
global
.
GVA_LOG
.
Error
(
"SqlServer启动异常"
,
zap
.
Any
(
"err"
,
err
))
os
.
Exit
(
0
)
}
else
{
global
.
GVA_DB
=
db
sqlDB
,
_
:=
db
.
DB
()
sqlDB
.
SetMaxIdleConns
(
ss
.
MaxIdleConns
)
sqlDB
.
SetMaxOpenConns
(
ss
.
MaxOpenConns
)
}
}
// config 根据配置决定是否开启日志
func
config
(
mod
bool
)
(
c
*
gorm
.
Config
)
{
if
mod
{
c
=
&
gorm
.
Config
{
Logger
:
logger
.
Default
.
LogMode
(
logger
.
Info
),
DisableForeignKeyConstraintWhenMigrating
:
true
,
}
}
else
{
c
=
&
gorm
.
Config
{
Logger
:
logger
.
Default
.
LogMode
(
logger
.
Silent
),
DisableForeignKeyConstraintWhenMigrating
:
true
,
}
}
return
}
server/main.go
浏览文件 @
1ab5c749
...
@@ -15,14 +15,7 @@ import (
...
@@ -15,14 +15,7 @@ import (
// @name x-token
// @name x-token
// @BasePath /
// @BasePath /
func
main
()
{
func
main
()
{
switch
global
.
GVA_CONFIG
.
System
.
DbType
{
initialize
.
Gorm
()
case
"mysql"
:
initialize
.
Mysql
()
// case "sqlite":
// initialize.Sqlite() // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可
default
:
initialize
.
Mysql
()
}
initialize
.
DBTables
()
initialize
.
DBTables
()
if
global
.
GVA_CONFIG
.
System
.
NeedInitData
{
if
global
.
GVA_CONFIG
.
System
.
NeedInitData
{
init_data
.
InitData
()
// 通过配置文件初始化数据 默认为 false 首次运行需要将 ./config.yaml中 system下的 need-init-data 修改为true
init_data
.
InitData
()
// 通过配置文件初始化数据 默认为 false 首次运行需要将 ./config.yaml中 system下的 need-init-data 修改为true
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录