GoFrame ORM原生SQL操作方法详解

Ivy
Ivy
发布时间:2026-10-15 | 5人浏览过
原创

当GoFrame的链式ORM操作无法满足复杂SQL需求时,原生方法是最佳选择。本文梳理Query、Exec等核心API的使用场景与代码示例,涵盖数据查询、插入、更新及删除的全流程操作。

为什么需要使用原生方法

GoFrame(简称gf)在开发中支持完整的ORM原生操作。虽然链式API简洁强大,但在处理极度复杂的SQL逻辑或需要直接控制底层驱动行为时,原生方法能提供更灵活的解决方案。以下整理常用原生方法的签名与使用规范。

基础SQL执行方法

这些方法返回Go标准库database/sql的对象,适合需要精细控制结果集的场景。

第1步:执行原始查询与写入

  • Query:用于数据查询,返回*sql.Rows对象。需注意自行解析结果集,适用于复杂查询或非结构化结果。
  • Exec:用于INSERT、UPDATE、DELETE等写入操作,返回sql.Result,可直接获取影响行数。
  • Prepare:创建预编译语句*sql.Stmt,适合重复执行的SQL以提高性能。
func Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
func Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
func Prepare(ctx context.Context, query string) (*sql.Stmt, error)

数据记录查询方法

执行查询时,推荐使用Get*系列方法,它们内置了结果解析逻辑,比手动解析sql.Rows更高效且不易出错。

第2步:获取不同格式的数据结果

根据业务需求选择具体的Get方法,所有方法均接受上下文、SQL字符串及可变参数。

  • GetAll:查询多条记录,返回Result类型(Map切片)。
  • GetOne:查询单条记录,返回Record类型(Map)。
  • GetValue:仅获取单个字段值,返回Value(任意基本类型)。
  • GetArray:获取单列多行数据,返回[]Value。
  • GetCount:统计数量,返回int。
  • GetScan:将查询结果扫描至结构体指针,适合对象映射。
func GetAll(ctx context.Context, sql string, args ...interface{}) (Result, error)
func GetOne(ctx context.Context, sql string, args ...interface{}) (Record, error)
func GetValue(ctx context.Context, sql string, args ...interface{}) (Value, error)
func GetArray(ctx context.Context, sql string, args ...interface{}) ([]Value, error)
func GetCount(ctx context.Context, sql string, args ...interface{}) (int, error)
func GetScan(ctx context.Context, objPointer interface{}, sql string, args ...interface{}) error

数据插入与替换操作

Insert、Replace和Save方法支持灵活的数据传入格式,自动处理批量操作逻辑。

第3步:配置写入参数与数据类型

  • 支持的数据类型:string、map、slice、struct及*struct。
  • 批量操作机制:当data参数为slice类型时,框架自动识别为批量操作,此时batch参数生效,优化大量数据写入性能。
func Insert(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
func Replace(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
func Save(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)

相比早期ORM版本,GoFrame的原生写入接口在处理批量插入时更加直观,无需额外拼接SQL即可实现高性能写入。

数据修改与删除

针对现有数据的更新与清除,使用Update和Delete方法。两者均需指定条件以定位目标记录。

第4步:执行更新或删除动作

  • Update:需传入更新数据data和过滤条件condition,条件部分支持占位符传参。
  • Delete:仅需指定表名和条件,返回执行结果的sql.Result。
func Update(ctx context.Context, table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
func Delete(ctx context.Context, table string, condition interface{}, args ...interface{}) (sql.Result, error)

总结

GoFrame的ORM设计兼顾了易用性与扩展性。在常规业务中优先使用链式API,当遇到复杂Join、子查询或性能瓶颈时,及时切换至原生方法操作是化繁为简的关键策略。掌握上述原生接口的签名与参数规则,能有效提升数据库操作的准确性与执行效率。

以上就是GoFrame ORM原生方法操作示例的详细内容,更多关于GoFrame ORM原生方法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表