Goframe中数据库配置

29   /   0   /   0   /   0   /   发布于 1年前
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,这样配置的原因是可以方便配置集群模式,[具体查看文档](https://goframe.org/) ### 加载数据库驱动 [这里找加载方法](https://github.com/gogf/gf/tree/master/contrib/drivers) ``` mport ( _ "github.com/gogf/gf/contrib/drivers/sqlite/v2" _ "github.com/gogf/gf/contrib/drivers/mysql/v2" ) ``` ### g.DB方法(推荐) 加载数据库驱动,[这里找加载方法](https://github.com/gogf/gf/tree/master/contrib/drivers) ``` 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都将失效" ```
  • 共 0 条回复
  • 需要登录 后方可回复, 如果你还没有账号请点击这里注册
梦初醒 茅塞开
  • 不经他人苦,莫劝他人善。
  • 能量足,心态稳,温和坚定可以忍。
  • 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
  • 要么忙于生存,要么赶紧去死!
  • 内心强大到混蛋,比什么都好!
  • 规范流程比制定制度更重要!
  • 立志需要高远,但不能急功近利;
    行动需要迅速,却不可贪图速成。
  • 不要强求人品,要设计高效的机制。
  • 你弱的时候,身边都是鸡零狗碎;
    你强的时候,身边都是风和日丽。
  • 机制比人品更可靠,契约比感情更可靠。
  • 合作不意味着没有冲突,却是控制冲突的最好方法。
  • 误解是人生常态,理解本是稀缺的例外。
  • 成功和不成功之间,只差一次坚持!
  • 祁连卧北雪,大漠壮雄关。
  • 利益顺序,过程公开,机会均等,付出回报。