LQH入职第16天--数据库

本文介绍了数据库的注册和连接过程,包括使用ORM注册默认数据库,循环读取数据库信息,设置连接超时,创建Ormer对象,并通过单例模式管理数据库连接,确保线程安全。
摘要由CSDN通过智能技术生成

1、数据库的注册,连接

func connectDbs() {
	registerDefault := false
	for dbName, config := range configs.GetGlobalConfig().DataBase {
		connectString := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&loc=Local",
			config.User, config.Password, config.Host, config.Port, config.Name, config.Charset)
		if registerDefault == false {
			orm.RegisterDataBase("default", "mysql", connectString, config.MaxIdleCons, config.MaxOpenCons)
			registerDefault = true
		}
		xzap.Sugar(nil).Infof("db (%v) c is (%v)", dbName, connectString)
		err := orm.RegisterDataBase(dbName, "mysql", connectString, config.MaxIdleCons, config.MaxOpenCons)
		if err == nil {
			ormDb, err := orm.GetDB(dbName)
			if err != nil {
				xzap.Sugar(nil).Errorf("orm GetDB (%v) error (%v)", dbName, err)
			} else {
				ormDb.SetConnMaxLifetime(time.Duration(config.MaxConsLifetime) * time.Second)
			}
			xzap.Sugar(nil).Infof("connect db (%v) success", dbName)
		} else {
			xzap.Sugar(nil).Errorf("connect db (%v) error (%v)", dbName, err)
		}
		o := orm.NewOrm()
		o.Using(dbName)
		// if configs.AppDebug() {
		// 	orm.Debug = true
		// }
		client.Connects[dbName] = o
	}
}

解析:
(1)orm必须注册一个default数据库
(2)将数据库的信息放在结构体数组里就可以循环的读取
(3)orm.GetDB()从已注册的数据库返回*sql.DB对象,默认返回别名为default的数据库。
(4)SetConnMaxLifetime(time.Duration
(config.MaxConsLifetime) * time.Second)
设置超时
(5)o = orm.NewOrm() // 创建一个 Ormer
(6)Using()切换为其它数据库

2、创建map[数据库名]ormer对象

func initDb() {
	client = &mysqlClient{
		Connects: make(map[string]orm.Ormer),
	}
	connectDbs()
	success = true
}

3、根据数据库名获取ormer对象

func GetMysqlDb(dbName string) orm.Ormer {
	if !success {
		dbLocker.Lock()
		if !success {
			initDb()
		}
		dbLocker.Unlock()
	}
	return client.Connects[dbName]
}

解析:采用单例模式的方法,只初始化一次DB,加锁防止多线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值