GoFrame ORM原生SQL操作方法详解
当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原生方法的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









