GoFrame
框架的ORM
功能由gdb
模块实现,用于常用关系型数据库的ORM
操作。
gdb
数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭,因此链接对象不用的时候不需要显式使用Close
方法关闭数据库连接。
注意:为提高数据库操作安全性,在ORM
操作中不建议直接将参数拼接成SQL
字符串执行,建议使用预处理的方式(充分使用?占位符)来传递SQL
参数。gdb
的底层实现中均采用的是预处理的方式处理开发者传递的参数,以充分保证数据库操作安全性。
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/database/gdb
GoFrame ORM
组件具有以下显著特点:
SQL
方法操作、ORM
链式操作两种方式。
OpenTelemetry
可观测性:链路跟踪、日志记录、指标上报。
Scan
方法自动识别Map/Struct
接收查询结果,自动化查询结果初始化、结构体类型转换。
nil
识别为空,无需sql.ErrNoRows
识别查询数据为空的情况。
Map/Struct/Slice
参数类型中的字段识别、过滤,大大提高查询条件输入、结果接收。
GoFrame
框架层面的DAO
设计,全自动化Model/DAO
代码生成,极大提高开发效率。
DryRun
、自定义Handler
、自动类型类型转换、自定义接口转换等等高级特性。
GoFrame ORM Features
GoFrame ORM Dependencies
获取数据库操作对象有三种方式,一种是使用g.DB
方法(推荐),一种是使用原生gdb.New
方法,还有一种是使用包原生单例方法gdb.Instance
,而第一种是推荐的使用方式。这三种方式的区别如下:
g.DB
对象管理方式获取的是单例对象,整合了配置文件的管理功能,支持配置文件热更新。
gdb.New
是根据给定的数据库节点配置创建一个新的数据库对象(非单例),无法使用配置文件。
gdb.Instance
是包原生单例管理方法,需要结合配置方法一起使用,通过分组名称(非必需)获取对应配置的数据库单例对象。有这么多对象获取方式原因在于GoFrame
是一个模块化设计的框架,每个模块皆可单独使用。
db, err := gdb.New(gdb.ConfigNode{
Link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test",
})
// 获取默认配置的数据库对象(配置名称为"default")
db := g.DB()
// 获取配置分组名称为"user"的数据库对象
db := g.DB("user")
// 使用原生单例管理方法获取数据库对象单例
db, err := gdb.Instance()
db, err := gdb.Instance("user")
由于go标准库的数据库操作对象采用接口实现,因此提供了非常好的可扩展性和兼容性。框架已支持的第三方数据库驱动请参考:https://github.com/gogf/gf/tree/master/contrib/drivers
额外接入新的数据库相当方便,可参考源码中关于PostgreSQL
、SQLite
、Oracle
、SQL Server
的接入方式。
基本介绍gcmd组件支持从终端读取用户输入数据,常用于终端交互场景。相关方法:func Scan(info ...interface{}) stringfunc ...
使用GoFrameORM组件进行事务操作非常简便、安全,可以通过两种操作方式来实现。常规操作:通过Begin开启事务之后会返回...
为便于开发阶段调试,GoFrameORM支持调试模式,可以通过Debug配置文件配置项或者SetDebug配置方式开启调试模式,随...
自定义回调处理是最常见的接口开发实现,我们往往只需要对接口中的部分实现进行替换修改,以在原有的实现逻辑中注入自定义的逻辑...