diff --git a/abstract/wrapper_client.go b/abstract/wrapper_client.go index 3c7090a..5f12266 100644 --- a/abstract/wrapper_client.go +++ b/abstract/wrapper_client.go @@ -14,7 +14,7 @@ import ( "gorm.io/gorm" ) -// IWrapperClient 包装的客户端 +// IWrapperClient 包装的客户端, 包装 IWrapperDatabaseClient // // Author : go_developer@163.com<白茶清欢> // @@ -27,7 +27,7 @@ type IWrapperClient interface { // BatchAddWithConfigDir 通过具体的配置列表增加数据库实例 BatchAddWithConfigDir(cfgDir string, logInstance *zap.Logger, extraFieldList []string) error // GetDBClient 基于数据库标识获取数据库实例 - GetDBClient(dbFlag string) (*define.DBClient, error) + GetDBClient(dbFlag string) (IWrapperDatabaseClient, error) // GetMasterClient 获取主库连接 GetMasterClient(ctx context.Context, dbFlag string) (*gorm.DB, error) // GetSlaveClient 获取从库连接 diff --git a/abstract/wrapper_db_client.go b/abstract/wrapper_db_client.go new file mode 100644 index 0000000..118719e --- /dev/null +++ b/abstract/wrapper_db_client.go @@ -0,0 +1,31 @@ +// Package abstract ... +// +// Description : abstract ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2024-08-20 17:59 +package abstract + +import ( + "context" + "git.zhangdeman.cn/zhangdeman/database/define" + "go.uber.org/zap" + "gorm.io/gorm" +) + +// IWrapperDatabaseClient 包装gorm +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:00 2024/8/20 +type IWrapperDatabaseClient interface { + // Init 初始化客户端连接 + Init(databaseConfig *define.Database) error + // GetMaster 获取master连接 + GetMaster(ctx context.Context) *gorm.DB + // GetSlave 获取slave连接 + GetSlave(ctx context.Context) *gorm.DB + // GetDatabaseClient 获取数据库连接 + GetDatabaseClient(conf *define.Driver, logInstance *zap.Logger) (*gorm.DB, error) +} diff --git a/wrapper_client.go b/wrapper_client.go index a199469..6698d91 100644 --- a/wrapper_client.go +++ b/wrapper_client.go @@ -36,13 +36,13 @@ func init() { func NewWrapperClient() *wrapperClient { return &wrapperClient{ lock: &sync.RWMutex{}, - clientTable: make(map[string]*define.DBClient), + clientTable: make(map[string]abstract.IWrapperDatabaseClient), } } type wrapperClient struct { lock *sync.RWMutex - clientTable map[string]*define.DBClient + clientTable map[string]abstract.IWrapperDatabaseClient logger *zap.Logger } @@ -73,7 +73,7 @@ func (c *wrapperClient) AddWithConfigFile(cfgFilePath string, logInstance *zap.L // // Date : 20:41 2023/4/18 func (c *wrapperClient) AddWithConfig(flag string, logInstance *zap.Logger, databaseConfig *define.Database, extraFieldList []string) error { - dbClient := &define.DBClient{ + dbClient := &DBClient{ DbFlag: flag, LoggerInstance: logInstance, ExtraFieldList: extraFieldList, @@ -158,12 +158,12 @@ func (c *wrapperClient) getCfg(cfgPath string) (*define.CfgFile, error) { // Author : go_developer@163.com<白茶清欢> // // Date : 19:32 2022/6/5 -func (c *wrapperClient) GetDBClient(dbFlag string) (*define.DBClient, error) { +func (c *wrapperClient) GetDBClient(dbFlag string) (abstract.IWrapperDatabaseClient, error) { c.lock.RLock() defer c.lock.RUnlock() var ( exist bool - dbClient *define.DBClient + dbClient abstract.IWrapperDatabaseClient ) if dbClient, exist = c.clientTable[dbFlag]; !exist { return nil, fmt.Errorf("%s 标识的数据库实例不存在! ", dbFlag) @@ -179,7 +179,7 @@ func (c *wrapperClient) GetDBClient(dbFlag string) (*define.DBClient, error) { func (c *wrapperClient) GetMasterClient(ctx context.Context, dbFlag string) (*gorm.DB, error) { var ( err error - dbClient *define.DBClient + dbClient abstract.IWrapperDatabaseClient ) if dbClient, err = c.GetDBClient(dbFlag); nil != err { return nil, err @@ -195,7 +195,7 @@ func (c *wrapperClient) GetMasterClient(ctx context.Context, dbFlag string) (*go func (c *wrapperClient) GetSlaveClient(ctx context.Context, dbFlag string) (*gorm.DB, error) { var ( err error - dbClient *define.DBClient + dbClient abstract.IWrapperDatabaseClient ) if dbClient, err = c.GetDBClient(dbFlag); nil != err { return nil, err diff --git a/define/db_client.go b/wrapper_db_client.go similarity index 81% rename from define/db_client.go rename to wrapper_db_client.go index 8039393..958ffd0 100644 --- a/define/db_client.go +++ b/wrapper_db_client.go @@ -5,12 +5,13 @@ // Author : go_developer@163.com<白茶清欢> // // Date : 2024-08-20 17:36 -package define +package database import ( "context" "fmt" "git.zhangdeman.cn/zhangdeman/consts" + "git.zhangdeman.cn/zhangdeman/database/define" "git.zhangdeman.cn/zhangdeman/logger/wrapper" "go.uber.org/zap" "gorm.io/driver/mysql" @@ -25,12 +26,12 @@ import ( // // Date : 3:09 PM 2021/12/24 type DBClient struct { - DbFlag string // 数据库标识 - LoggerInstance *zap.Logger // 日志实例 - master *gorm.DB // 主库 - slave *gorm.DB // 从库 - ExtraFieldList []string // 提取的字段 - Cfg Driver // 数据库配置 + DbFlag string // 数据库标识 + LoggerInstance *zap.Logger // 日志实例 + master *gorm.DB // 主库 + slave *gorm.DB // 从库 + ExtraFieldList []string // 提取的字段 + Cfg define.Driver // 数据库配置 } // Init 初始化客户端 @@ -38,7 +39,7 @@ type DBClient struct { // Author : go_developer@163.com<白茶清欢> // // Date : 17:44 2024/8/20 -func (dc *DBClient) Init(databaseConfig *Database) error { +func (dc *DBClient) Init(databaseConfig *define.Database) error { var err error if dc.master, err = dc.GetDatabaseClient(databaseConfig.Master, dc.LoggerInstance); nil != err { return err @@ -49,15 +50,6 @@ func (dc *DBClient) Init(databaseConfig *Database) error { return nil } -// SetFlag 设置数据库标识 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 16:18 2022/6/5 -func (dc *DBClient) SetFlag(dbFlag string) { - dc.DbFlag = dbFlag -} - // GetMaster 获取主库连接 // // Author : go_developer@163.com<白茶清欢> @@ -94,12 +86,16 @@ func (dc *DBClient) getLogger(ctx context.Context, dbClient *gorm.DB, node strin // Author : go_developer@163.com<白茶清欢> // // Date : 18:41 2022/6/11 -func (dc *DBClient) GetDatabaseClient(conf *Driver, logInstance *zap.Logger) (*gorm.DB, error) { +func (dc *DBClient) GetDatabaseClient(conf *define.Driver, logInstance *zap.Logger) (*gorm.DB, error) { var ( instance *gorm.DB err error ) + if nil == logInstance { + logInstance = dc.LoggerInstance + } + if conf.DBType == consts.DatabaseDriverMysql { if instance, err = gorm.Open(mysql.Open(dc.buildConnectionDSN(conf)), &gorm.Config{}); nil != err { return nil, err @@ -122,7 +118,7 @@ func (dc *DBClient) GetDatabaseClient(conf *Driver, logInstance *zap.Logger) (*g // Author : go_developer@163.com<白茶清欢> // // Date : 18:42 2022/6/11 -func (dc *DBClient) buildConnectionDSN(conf *Driver) string { +func (dc *DBClient) buildConnectionDSN(conf *define.Driver) string { if conf.DBType == consts.DatabaseDriverSqlite3 { // 兼容sqlite3 return conf.Host