基本介绍

注意:为提高数据库操作安全性,在ORM操作中不建议直接将参数拼接成SQL字符串执行,建议尽量使用预处理的方式(充分使用?占位符)来传递SQL参数。gdb的底层实现中均采用的是预处理的方式处理开发者传递的参数,以充分保证数据库操作安全性。

接口文档:

数据结构

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

  1. Map与用于ORM操作过程中的输入参数类型(与全局类型g.Mapg.List一致,在项目开发中常用g.Mapg.List替换);
  2. Value/Record/Result用于ORM操作的结果数据类型,具体说明请查看 章节;

g.DBgdb.Newgdb.Instance

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

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

获取ORM对象示例:

  1. // 获取默认配置的数据库对象(配置名称为"default")
  2. db := g.DB()
  3. // 获取配置分组名称为"user-center"的数据库对象
  4. db := g.DB("user-center")
  5. // 使用原生New方法创建数据库对象
  6. db, err := gdb.New()
  7. // 使用原生单例管理方法获取数据库对象单例
  8. db, err := gdb.Instance()
  9. // 注意不用的时候不需要使用Close方法关闭数据库连接(并且gdb也没有提供Close方法),
  10. // 数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭

支持的数据库类型

由于go标准库的数据库操作对象采用接口实现,因此提供了非常好的可扩展性和兼容性。

内置支持,无需额外扩展或第三方包接入,直接可用。 依赖的第三方包:https://github.com/go-sql-driver/mysql

SQLite

在使用时需要引入第三方包 ( go-sqlite3 ):

限制

  1. 不支持Save/Replace方法
  1. _ "github.com/lib/pq"

限制

  1. 不支持LastInsertId方法
  2. 不支持Save/Replace方法

SQL Server

使用时需导入第三方包 (go-mssqldb ):

限制

  1. 不支持LastInsertId方法
  2. 不支持Save/Replace方法
  3. 仅支持SQL Server 2005及其后的版本

使用时需导入第三方包 ( ):

  1. _ "github.com/mattn/go-oci8"

限制

  1. 不支持LastInsertId方法
  2. 不支持Save/Replace方法

其他数据库类型