Documentation
¶
Index ¶
- Constants
- func DbOpen(driverType, dsn string) (*gorm.DB, error)
- func ErrIsDbNotFound(err error) bool
- func ErrIsDbNotFoundInContext(err error) bool
- func ErrIsInputType(err error) bool
- func GetBusinessDbFromContext(ctx context.Context) (*gorm.DB, error)
- func GetDbFromContext(ctx context.Context, dbKey interface{}) (*gorm.DB, error)
- func GetDefaultDbFromContext(ctx context.Context) (*gorm.DB, error)
- func MustDbOpen(driverType, dsn string) *gorm.DB
- func MustGetBusinessDbFromContext(ctx context.Context) *gorm.DB
- func MustGetDbFromContext(ctx context.Context, dbKey interface{}) *gorm.DB
- func MustGetDefaultDbFromContext(ctx context.Context) *gorm.DB
- func MustGetTenantDbFromContext(ctx context.Context) (defaultDb *gorm.DB, businessDb *gorm.DB)
- func MustWithBusinessDbContext(ctx context.Context, name string) context.Context
- func MustWithDefaultDbContext(ctx context.Context, name string) context.Context
- func MustWithTenantDbContext(ctx context.Context, defaultName, businessName string) context.Context
- func WithBusinessDbContext(ctx context.Context, name string) (context.Context, error)
- func WithDbContext(ctx context.Context, dbKey interface{}, db *gorm.DB) context.Context
- func WithDefaultDbContext(ctx context.Context, name string) (context.Context, error)
- type DbManager
- type MemoryDbManager
- func (m *MemoryDbManager) Count() int
- func (m *MemoryDbManager) Exists(name string) bool
- func (m *MemoryDbManager) Get(name string) (*gorm.DB, error)
- func (m *MemoryDbManager) GetSign(name string) (string, error)
- func (m *MemoryDbManager) Register(name, sign string, db *gorm.DB)
- func (m *MemoryDbManager) String() string
- func (m *MemoryDbManager) Unregister(name string) bool
Examples ¶
Constants ¶
const ( DriverTypeMysql = "mysql" DriverTypeSqlite = "sqlite" DriverTypePostgres = "postgres" DriverTypeMssql = "mssql" )
Variables ¶
This section is empty.
Functions ¶
func ErrIsDbNotFound ¶
func ErrIsInputType ¶
func GetBusinessDbFromContext ¶
GetBusinessDbFromContext from context get business db
func GetDbFromContext ¶
GetDbFromContext retrieves *gorm.DB from context.Context
func GetDefaultDbFromContext ¶
GetDefaultDbFromContext will retrieve the default *gorm.DB from the context.Context
func MustDbOpen ¶
func MustGetBusinessDbFromContext ¶
MustGetBusinessDbFromContext from context get business db
func MustGetDbFromContext ¶
MustGetDbFromContext retrieves *gorm.DB from context.Context, panics if not found
func MustGetDefaultDbFromContext ¶
MustGetDefaultDbFromContext will retrieve the default *gorm.DB from the context.Context, panics if not found @param ctx context.Context @return *gorm.DB
func MustGetTenantDbFromContext ¶
MustGetTenantDbFromContext from context get default db and business db @param ctx context.Context @return *gorm.DB defaultDb and businessDb
func MustWithBusinessDbContext ¶
MustWithBusinessDbContext will inject the business *gorm.DB into the context.Context, panics if not found
func MustWithDefaultDbContext ¶
MustWithDefaultDbContext will inject the default *gorm.DB into the context.Context, panics if not found @param ctx context.Context @param name string the name of the MultiDbManager.RegisterDb name @return context.Context
func MustWithTenantDbContext ¶
MustWithTenantDbContext inject default db and business db into context @param ctx context.Context @param defaultName string of the MultiDbManager.RegisterDb name @param businessName string of the MultiDbManager.RegisterDb name @return context.Context
Example ¶
package main import ( "context" "crypto/md5" "encoding/json" "fmt" "github.com/qq1060656096/bgorm" ) func main() { mdb := bgorm.DefaultDbManager dsn := "root:root@tcp(127.0.0.1:3306)/test_data_1?charset=utf8mb4&parseTime=True&loc=Local" dsn2 := "root:root@tcp(127.0.0.1:3306)/test_data_2?charset=utf8mb4&parseTime=True&loc=Local" // database 1 db := bgorm.MustDbOpen(bgorm.DriverTypeMysql, dsn) dbSign := fmt.Sprintf("%s", md5.Sum([]byte(dsn))) mdb.Register("test_data_1", dbSign, db) // database 2 db = bgorm.MustDbOpen(bgorm.DriverTypeMysql, dsn2) dbSign = fmt.Sprintf("%s", md5.Sum([]byte(dsn2))) mdb.Register("test_data_2", dbSign, db) ctx := context.Background() ctx = bgorm.MustWithTenantDbContext(ctx, "test_data_1", "test_data_2") comDb, bizDb := bgorm.MustGetTenantDbFromContext(ctx) var tools []map[string]interface{} comDb.Raw("select tools_id,tenant_id from tools order by tools_id asc limit 2").Find(&tools) jsonBytes, err := json.Marshal(tools) if err != nil { panic(err) } fmt.Println(string(jsonBytes)) var tools2 []map[string]interface{} bizDb.Raw("select tools_id,tenant_id from tools limit 2").Find(&tools2) jsonBytes, err = json.Marshal(tools2) if err != nil { panic(err) } fmt.Println(string(jsonBytes)) }
Output: [{"tenant_id":1,"tools_id":1},{"tenant_id":2,"tools_id":2}] [{"tenant_id":4,"tools_id":4},{"tenant_id":5,"tools_id":5}]
func WithBusinessDbContext ¶
WithBusinessDbContext will inject the business *gorm.DB into the context.Context
func WithDbContext ¶
WithDbContext injects *gorm.DB into context.Context
func WithDefaultDbContext ¶
WithDefaultDbContext will inject the default *gorm.DB into the context.Context @param ctx context.Context @param name string the name of the MultiDbManager.RegisterDb name @return context.Context @return error
Types ¶
type DbManager ¶
type DbManager interface { // Register a db with name and sign // @param name: db name // @param sign: db connection config sign, used to re-register db when connection config changed // @param db: gorm db instance Register(name string, sign string, db *gorm.DB) // Unregister remove db by name // @param name: db name // @return: true if db exists and removed, false if db not exists Unregister(name string) bool // Get get db by name // @param name: db name // @return: db instance and nil if db exists, nil and error if db not exists Get(name string) (*gorm.DB, error) // GetSign get db sign by name // @param name: db name // @return: db sign and nil if db exists, nil and error if db not exists GetSign(name string) (string, error) // Exists check if db exists by name // @param name: db name // @return: true if db exists, false if db not exists Exists(name string) bool // Count get db count Count() int }
DbManager is a manager for multiple db instances
var (
DefaultDbManager DbManager = NewMemoryDbManager()
)
func NewMemoryDbManager ¶
func NewMemoryDbManager() DbManager
NewMemoryDbManager 创建一个新的 MemoryDbManager 实例
Example ¶
package main import ( "crypto/md5" "encoding/json" "fmt" "github.com/qq1060656096/bgorm" ) func main() { mdb := bgorm.NewMemoryDbManager() dsn := "root:root@tcp(127.0.0.1:3306)/test_data_1?charset=utf8mb4&parseTime=True&loc=Local" dsn2 := "root:root@tcp(127.0.0.1:3306)/test_data_2?charset=utf8mb4&parseTime=True&loc=Local" // database 1 db := bgorm.MustDbOpen(bgorm.DriverTypeMysql, dsn) dbSign := fmt.Sprintf("%s", md5.Sum([]byte(dsn))) mdb.Register("test_data_1", dbSign, db) // database 2 db = bgorm.MustDbOpen(bgorm.DriverTypeMysql, dsn2) dbSign = fmt.Sprintf("%s", md5.Sum([]byte(dsn2))) mdb.Register("test_data_2", dbSign, db) db, err := mdb.Get("test_data_1") if err != nil { panic(err) } tools := []map[string]interface{}{} db.Raw("select tools_id,tenant_id from tools limit 2").Find(&tools) jsonBytes, err := json.Marshal(tools) if err != nil { panic(err) } fmt.Println(string(jsonBytes)) }
Output: [{"tenant_id":1,"tools_id":1},{"tenant_id":2,"tools_id":2}]
type MemoryDbManager ¶
type MemoryDbManager struct {
// contains filtered or unexported fields
}
MemoryDbManager 管理多个数据库实例
func (*MemoryDbManager) Exists ¶
func (m *MemoryDbManager) Exists(name string) bool
Exists 检查数据库实例是否存在
func (*MemoryDbManager) Get ¶
func (m *MemoryDbManager) Get(name string) (*gorm.DB, error)
Get 获取数据库实例
func (*MemoryDbManager) GetSign ¶
func (m *MemoryDbManager) GetSign(name string) (string, error)
GetSign 获取数据库实例标识
func (*MemoryDbManager) Register ¶
func (m *MemoryDbManager) Register(name, sign string, db *gorm.DB)
Register 注册数据库实例
func (*MemoryDbManager) String ¶
func (m *MemoryDbManager) String() string
String 返回所有数据库实例及其标识的JSON字符串
func (*MemoryDbManager) Unregister ¶
func (m *MemoryDbManager) Unregister(name string) bool
Unregister 注销数据库实例