103 lines
2.7 KiB
Go
103 lines
2.7 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"git.magicany.cc/black1552/gin-base/db/core"
|
|
"git.magicany.cc/black1552/gin-base/db/driver"
|
|
)
|
|
|
|
// 示例:在应用程序中使用纯自研驱动管理
|
|
func ExampleUsage() {
|
|
// 1. 首先导入你选择的第三方数据库驱动
|
|
// 注意:这些驱动需要在 main 包或启动包中导入
|
|
/*
|
|
import (
|
|
_ "github.com/mattn/go-sqlite3" // SQLite 驱动
|
|
_ "github.com/go-sql-driver/mysql" // MySQL 驱动
|
|
_ "github.com/lib/pq" // PostgreSQL 驱动
|
|
_ "github.com/denisenkom/go-mssqldb" // SQL Server 驱动
|
|
)
|
|
*/
|
|
|
|
// 2. 获取驱动管理器并注册你选择的驱动
|
|
manager := driver.GetDefaultManager()
|
|
|
|
// 注册 SQLite 驱动
|
|
sqliteDriver := driver.NewGenericDriver("sqlite3")
|
|
manager.Register("sqlite3", sqliteDriver)
|
|
manager.Register("sqlite", sqliteDriver) // 别名
|
|
|
|
// 注册 MySQL 驱动
|
|
mysqlDriver := driver.NewGenericDriver("mysql")
|
|
manager.Register("mysql", mysqlDriver)
|
|
|
|
// 注册 PostgreSQL 驱动
|
|
postgresDriver := driver.NewGenericDriver("postgres")
|
|
manager.Register("postgres", postgresDriver)
|
|
|
|
// 3. 加载配置文件
|
|
configFile, err := LoadFromFile("config.yaml")
|
|
if err != nil {
|
|
fmt.Printf("加载配置失败:%v\n", err)
|
|
return
|
|
}
|
|
|
|
// 4. 验证驱动是否已注册
|
|
err = manager.RegisterDriverByConfig(configFile.Database.Type)
|
|
if err != nil {
|
|
fmt.Printf("驱动未注册:%v\n", err)
|
|
return
|
|
}
|
|
|
|
// 5. 使用配置创建数据库连接
|
|
dbConfig := &core.Config{
|
|
DriverName: configFile.Database.GetDriverName(),
|
|
DataSource: configFile.Database.BuildDSN(),
|
|
Debug: true,
|
|
MaxIdleConns: 10,
|
|
MaxOpenConns: 100,
|
|
ConnMaxLifetime: 3600000000000, // 1小时
|
|
}
|
|
|
|
// 6. 创建数据库实例
|
|
db, err := core.NewDatabase(dbConfig)
|
|
if err != nil {
|
|
fmt.Printf("创建数据库连接失败:%v\n", err)
|
|
return
|
|
}
|
|
|
|
fmt.Printf("成功连接到 %s 数据库\n", configFile.Database.Type)
|
|
|
|
// 现在可以使用 db 进行数据库操作
|
|
_ = db
|
|
}
|
|
|
|
// AdvancedExample 高级使用示例
|
|
func AdvancedExample() {
|
|
manager := driver.GetDefaultManager()
|
|
|
|
// 根据环境变量或配置动态注册驱动
|
|
databaseType := "sqlite3" // 从配置获取
|
|
|
|
// 注册对应驱动
|
|
genericDriver := driver.NewGenericDriver(databaseType)
|
|
manager.Register(databaseType, genericDriver)
|
|
|
|
// 验证驱动
|
|
err := manager.RegisterDriverByConfig(databaseType)
|
|
if err != nil {
|
|
fmt.Printf("驱动注册问题:%v\n", err)
|
|
return
|
|
}
|
|
|
|
// 现在可以安全地打开数据库连接
|
|
db, err := manager.Open(databaseType, "./example.db")
|
|
if err != nil {
|
|
fmt.Printf("打开数据库失败:%v\n", err)
|
|
return
|
|
}
|
|
defer db.Close()
|
|
|
|
fmt.Println("数据库连接成功")
|
|
}
|