gin-base/db/config/usage_example.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("数据库连接成功")
}