feat(database): 添加数据库连接初始化和ORM支持
- 实现MySQL和SQLite数据库连接初始化功能 - 集成GORM ORM框架支持 - 添加数据库连接状态检测和错误处理 - 实现数据库自动迁移功能 - 添加字段重命名和删除功能 - 更新配置文件以支持数据库类型选择 - 添加TCP服务器示例代码 - 添加WebSocket服务示例代码 - 集成MQTT客户端功能 - 更新项目依赖包列表
This commit is contained in:
+59
-1
@@ -1,5 +1,63 @@
|
||||
package database
|
||||
|
||||
func init() {
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"git.magicany.cc/black1552/gin-base/config"
|
||||
"git.magicany.cc/black1552/gin-base/log"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
Type gorm.Dialector
|
||||
Db *gorm.DB
|
||||
err error
|
||||
sqlDb *sql.DB
|
||||
dns = config.GetConfigValue("database.dns", "")
|
||||
)
|
||||
|
||||
func init() {
|
||||
if g.IsEmpty(dns) {
|
||||
log.Error("gormDns未配置", "请检查配置文件")
|
||||
return
|
||||
}
|
||||
switch config.GetConfigValue("database.type", "mysql").String() {
|
||||
case "mysql":
|
||||
log.Info("使用mysql数据库")
|
||||
mysqlInit()
|
||||
case "sqlite":
|
||||
log.Info("使用sqlite数据库")
|
||||
sqliteInit()
|
||||
}
|
||||
Db, err = gorm.Open(Type, &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Error("数据库连接失败: ", err)
|
||||
return
|
||||
}
|
||||
sqlDb, err = Db.DB()
|
||||
if err != nil {
|
||||
log.Error("获取sqlDb失败", err)
|
||||
return
|
||||
}
|
||||
if err = sqlDb.Ping(); err != nil {
|
||||
log.Error("数据库未正常连接", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func mysqlInit() {
|
||||
Type = mysql.New(mysql.Config{
|
||||
DSN: config.GetConfigValue("database.dns", "").String(),
|
||||
DefaultStringSize: 255, // string 类型字段的默认长度
|
||||
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
|
||||
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
|
||||
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
|
||||
})
|
||||
}
|
||||
|
||||
func sqliteInit() {
|
||||
Type = sqlite.Open(config.GetConfigValue("database.dns", "").String())
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package database
|
||||
@@ -0,0 +1,44 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"git.magicany.cc/black1552/gin-base/log"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
func SetAutoMigrate(models ...interface{}) {
|
||||
if g.IsNil(Db) {
|
||||
log.Error("数据库连接失败")
|
||||
return
|
||||
}
|
||||
Db = Db.Set("gorm:table_options", "ENGINE=InnoDB")
|
||||
err := Db.AutoMigrate(models...)
|
||||
if err != nil {
|
||||
log.Error("数据库迁移失败", err)
|
||||
}
|
||||
}
|
||||
func RenameColumn(dst interface{}, name, newName string) {
|
||||
if Db.Migrator().HasColumn(dst, name) {
|
||||
err := Db.Migrator().RenameColumn(dst, name, newName)
|
||||
if err != nil {
|
||||
log.Error("数据库修改字段失败", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
log.Info("数据库字段不存在", name)
|
||||
}
|
||||
}
|
||||
|
||||
// DropColumn
|
||||
// 删除字段
|
||||
// 例:DropColumn(&User{}, "Sex")
|
||||
func DropColumn(dst interface{}, name string) {
|
||||
if Db.Migrator().HasColumn(dst, name) {
|
||||
err := Db.Migrator().DropColumn(dst, name)
|
||||
if err != nil {
|
||||
log.Error("数据库删除字段失败", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
log.Info("数据库字段不存在", name)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user