mirror of
http://github.com/goal-web/database
synced 2025-12-24 10:40:53 +08:00
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package drivers
|
|
|
|
import (
|
|
"fmt"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"github.com/goal-web/contracts"
|
|
"github.com/goal-web/supports/logs"
|
|
"github.com/goal-web/supports/utils"
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
type Mysql struct {
|
|
*Base
|
|
}
|
|
|
|
func MysqlConnector(config contracts.Fields, events contracts.EventDispatcher) contracts.DBConnection {
|
|
dsn := utils.GetStringField(config, "unix_socket")
|
|
if dsn == "" {
|
|
dsn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s",
|
|
utils.GetStringField(config, "username"),
|
|
utils.GetStringField(config, "password"),
|
|
utils.GetStringField(config, "host"),
|
|
utils.GetStringField(config, "port"),
|
|
utils.GetStringField(config, "database"),
|
|
utils.GetStringField(config, "charset"),
|
|
)
|
|
}
|
|
db, err := sqlx.Connect("mysql", dsn)
|
|
if err != nil {
|
|
logs.WithError(err).WithField("config", config).Fatal("mysql 数据库初始化失败")
|
|
}
|
|
db.SetMaxOpenConns(utils.GetIntField(config, "max_connections"))
|
|
db.SetMaxIdleConns(utils.GetIntField(config, "max_idles"))
|
|
|
|
return &Mysql{NewDriver(db, events)}
|
|
}
|