Goframe中数据库配置

goframe中获取数据库操作对象有三种方式,一种是使用g.DB方法(推荐),一种是使用原生gdb.New方法,还有一种是使用包原生单例方法gdb.Instance

配置文件

{
	"database": {
		"default": 
			[{"link": "sqlite:/home/xjc/go/src/gitee/test-gf/testGf.db", "debug": "true"}],
		"focus": 
			[{"link": "mysql:focus:sadmQHH*i@tcp(192.168.1.1:3306)/focus", "debug": "true", "role": "master"}]
			[{"link": "mysql:focus:sadmQHH*i@tcp(192.168.1.2:3306)/focus", "debug": "true", "role": "slave"}]
	}
}

这里是json格式,也可以使用yaml,这样配置的原因是可以方便配置集群模式,具体查看文档

加载数据库驱动

这里找加载方法

mport (
    _ "github.com/gogf/gf/contrib/drivers/sqlite/v2" 
    _ "github.com/gogf/gf/contrib/drivers/mysql/v2"
)

g.DB方法(推荐)

加载数据库驱动,这里找加载方法

import (
    "github.com/gogf/gf/v2/frame/g"
)

// 获取默认配置的数据库对象(配置名称为"default")
db := g.DB()

// 获取配置分组名称为"user"的数据库对象
db := g.DB("user")

g.DB对象管理方式获取的是单例对象,整合了配置文件的管理功能,支持配置文件热更新。

gdb.New是根据给定的数据库节点配置创建一个新的数据库对象(非单例),无法使用配置文件。(这里有坑)

db, err := gdb.New(gdb.ConfigNode{
        Host     : "/home/xjc/go/src/gitee/test-gf/",
        Name     : "testGf.db",
        Type     : "sqlite",
})

这里不支持link写法,注意这里sqlite的写法

gdb.Instance是包原生单例管理方法,需要结合配置方法一起使用,通过分组名称(非必需)获取对应配置的数据库单例对象。

gdb.SetConfig(gdb.Config {
    "default" : gdb.ConfigGroup {
        gdb.ConfigNode {
            Link: "sqlite:/home/xjc/go/src/gitee/test-gf/testGf.db",
        },
    },
    "focus" : gdb.ConfigGroup {
        gdb.ConfigNode {
            Link: "mysql:focus:sadmQHH*i@tcp(192.168.1.1:3306)/focus",
        },
    },
})

//数据库dufault
db, err := gdb.Instance()
//数据库focus
db, err := gdb.Instance("focus")
//或
//数据库dufault
db, err := gdb.NewByGroup()
//数据库focus
db, err := gdb.NewByGroup("focus")

使用该配置方式时,为保证数据库安全,默认底层不支持多行SQL语句执行。为了得到更多配置项控制,请参考推荐的简化配置,同时建议您务必了解清楚简化配置项中每个连接参数的功能作用。

database:
  分组名称:
    host:                  "地址"
    port:                  "端口"
    user:                  "账号"
    pass:                  "密码"
    name:                  "数据库名称"
    type:                  "数据库类型(mysql/pgsql/mssql/sqlite/oracle)"
    link:                  "(可选)自定义数据库链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效,但是type必须有值"         
    role:                  "(可选)数据库主从角色(master/slave),不使用应用层的主从机制请均设置为master"
    debug:                 "(可选)开启调试模式"
    prefix:                "(可选)表名前缀"
    dryRun:                "(可选)ORM空跑(只读不写)"
    charset:               "(可选)数据库编码(如: utf8/gbk/gb2312),一般设置为utf8"
    weight:                "(可选)负载均衡权重,用于负载均衡控制,不使用应用层的负载均衡机制请置空"
    timezone:              "(可选)时区配置,例如:local"
    maxIdle:               "(可选)连接池最大闲置的连接数"
    maxOpen:               "(可选)连接池最大打开的连接数"
    maxLifetime:           "(可选)连接对象可重复使用的时间长度"
    createdAt:             "(可选)自动创建时间字段名称"
    updatedAt:             "(可选)自动更新时间字段名称"
    deletedAt:             "(可选)软删除时间字段名称"
    timeMaintainDisabled:  "(可选)是否完全关闭时间更新特性,true时CreatedAt/UpdatedAt/DeletedAt都将失效"