基本介绍

gf框架的ORM功能由gdb模块实现,最大的特色在于底层默认使用了map数据类型作为基础的数据表记录载体,而非使用struct,开发者无需预先定义数据表记录struct便可直接对数据表记录执行各种操作。这样的设计赋予了开发者更高的灵活度和简便性,当然gdb也支持数据表记录struct的映射转换,详细介绍请查看后续【ORM高级特性】章节。

gdb数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭,因此链接对象不用的时候不需要显式使用Close方法关闭数据库连接。这也是gdb数据库模块人性化设计的地方,方便开发者使用数据库而无需手动维护大量的数据库链接对象。

注意:为提高数据库操作安全性,在ORM操作中不建议直接将参数拼接成SQL执行,又或者将参数拼接称字符串执行,建议尽量使用预处理的方式(充分使用?占位符)来传递SQL参数。

接口文档:https://godoc.org/github.com/gogf/gf/g/database/gdb

数据结构

为便于数据表记录的操作,ORM定义了5种基本的数据类型:

  1. type Map map[string]interface{} // 数据记录
  2. type List []Map // 数据记录列表
  3. type Value *gvar.Var // 返回数据表记录值
  4. type Record map[string]Value // 返回数据表记录键值对
  5. type Result []Record // 返回数据表记录列表
  1. MapList用于ORM操作过程中的输入参数类型(与全局类型g.Mapg.List一致,在项目开发中常用g.Mapg.List替换);
  2. Value/Record/Result用于ORM操作的结果数据类型,具体说明请查看【ORM结果处理】章节;

使用g.DBgdb.Newgdb.Instance的区别

获取数据库操作对象有三种方式,一种是使用g.DB方法,一种是使用原生gdb.New方法,还有一种是使用包原生单例方法gdb.Instance,而第一种是推荐的使用方式。这三种方式的区别如下:

  1. g.DB对象管理方式获取的是单例对象,整合了配置文件的管理功能,支持配置文件热更新;
  2. gdb.New是创建一个新的数据库对象(非单例),无法使用配置文件,需要使用包配置管理方法进行配置;
  3. gdb.Instance是包原生单例管理方法,需要结合配置方法一起使用,通过分组名称(非必需)获取对应配置的数据库单例对象;
  4. 其他使用无差别;