GoFrame ORM原生方法操作示例

目录
  • 前言
  • 常用方法
    • SQL操作方法,返回原生的标准库sql对象
    • 数据表记录查询:
    • 数据单条操作
    • 数据修改/删除
  • 总结

前言

最近一直在用GoFrame(下文简称gf)来开发项目,在熟悉业务逻辑之后就是马不停蹄的撸代码了。

之前整理过结构体和json转换的文章:GoFrame必知必会之Scan:类型转换,今天整理同样比较重要的ORM相关的文章。

gf是支持ORM原生操作的,在ORM链式操作执行不了太过于复杂的SQL操作时,可以交给方法操作来处理。

这篇文章整理原生操作的常用方法,下篇文章根据整理的原生方法整理对应的开箱体验。

常用方法

SQL操作方法,返回原生的标准库sql对象

  • Query是原始的数据查询方法,返回的是原生的标准库的结果集对象,需要自行解析。
  • Exec方法用于写入/更新的SQL的操作。
Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
Prepare(ctx context.Context, query string) (*sql.Stmt, error)

数据表记录查询:

  • 查询单条记录、查询多条记录、获取记录对象、查询单个字段值(链式操作同理)
  • 在执行数据查询时推荐使用Get*系列查询方法。
GetAll(ctx context.Context, sql string, args ...interface{}) (Result, error)
GetOne(ctx context.Context, sql string, args ...interface{}) (Record, error)
GetValue(ctx context.Context, sql string, args ...interface{}) (Value, error)
GetArray(ctx context.Context, sql string, args ...interface{}) ([]Value, error)
GetCount(ctx context.Context, sql string, args ...interface{}) (int, error)
GetScan(ctx context.Context, objPointer interface{}, sql string, args ...interface{}) error

数据单条操作

Insert/Replace/Save方法中的data参数支持的数据类型为:

string/map/slice/struct/*struct,当传递为slice类型时,自动识别为批量操作,此时batch参数有效。

Insert(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Replace(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Save(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)

在这里由衷的感叹一句:gf确实非常方便。至今记得自己用gorm1.1版本时,困顿于批量插入无法自拔:# Go GORM是时候升级新版本了 2.0新特性介绍

数据修改/删除

Update(ctx context.Context, table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Delete(ctx context.Context, table string, condition interface{}, args ...interface{}) (sql.Result, error)

总结

虽然GoFrame的ORM链式操作非常简单且强大,但是业务中总还是有一些逻辑需要使用原生方法实现,化繁为简。

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

(0)

相关推荐

  • goFrame的队列gqueue对比channel使用详解

    目录 channel gqueue 概念 使用场景: 代码演示 打印结果 优势 底层实现 阻止进程销毁 运行结果 总结 channel 首先明确一下channel的作用:用于go协程间的通信. go语言最大的特点就是支持高并发:goroutine和channel是支持高并发的重要组成部分. 单纯地将函数并发执行是没有意义的.函数与函数间需要交换数据才能体现并发执行函数的意义. 如果说 goroutine 是Go程序并发的执行体,channel就是它们之间的连接.channel是可以让一个 gor

  • Go Frame gtree树形结构的使用技巧示例

    目录 树形结构 一图胜千言 查询源码 使用场景 使用入门 常用方法 示例代码 打印结果 技巧 树形结构 树形结构gtree具有以下特点: 支持排序,支持有序遍历 内存占用低 复杂度稳定 适合大数据量存储 一图胜千言 查询源码 使用场景 关联数组场景 大数据量内存CRUD 排序键值对(后面的示例就是前序遍历和后序遍历) 使用入门 我们以实例化红黑树为例(实例化B树.高度平衡树也是一样的方式) 常用方法 Set() 赋值 Keys() 获得键列表 Values() 获得值列表 Contains()

  • GoFrame glist 基础使用和自定义遍历

    目录 join 序列化和反序列化 基础概念 GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap.数组garray.集合gset.队列gqueue.树形结构gtree.链表glist都是支持设置并发安全开关的. 支持设置并发安全开关这也是gf提供的常用数据类型和原生数据类型非常重要的区别 今天和大家分享gf框架的glist详解: 基本使用 glist的使用场景是:双向链表 通过PushBack向链表尾部插入数据 通过PushFront向链表头部插入数据 通过InsertBefor

  • GoFrame框架Scan类型转换实例

    目录 前言 方法定义 自动识别转换Struct结构体 示例代码 运行结果 自动识别转换Struct数组 示例代码 运行结果 自动识别转换Map 示例代码 运行结果 自动识别转换Map数组 示例代码 运行结果 总结 前言 Scan转换方法可以实现对任意参数到struct/struct数组/map/map数组的转换,并且根据开发者输入的转换目标参数自动识别执行转换. 方法定义 // Scan automatically calls MapToMap, MapToMaps, Struct or Str

  • GoFrame框架garray并发安全数组使用开箱体验

    目录 前言 普通数组 Append At Chunk Clear Clone PopLefts 总结 前言 今天在搞一个需求,从三方获得有信息变更的商品,更新自己的数据库,再推送给下游进行商品更新. 期间有更新商品数量不确定,为了保证程序稳定性,每组向下游推送20个商品id. 查了garray的文档,发现支持Chunk()方法,灰常好用. func commonSendMessage(goodsIds *garray.IntArray, messageType int) { goodsIdsCh

  • GoFrame通用类型变量gvar与interface基本使用对比

    目录 前言摘要 通用变量 gvar 使用场景 看源码学编程 如何设置并发安全开关呢? 基本使用 打印结果 序列化示例 打印结果 总结 前言摘要 这篇文章将介绍 GoFrame 通用类型变量gvar的概念,对比 interface{}的特点:以及如何设置gvar的并发安全开关等基础使用:介绍序列化示例代码. 通用变量 gvar gvar 通用动态变量,支持各种内置的数据类型转换,可以作为interface{}类型的替代数据类型,并且该类型支持并发安全开关. 使用场景 所有需要使用interface

  • GoFrame ORM原生方法操作示例

    目录 前言 常用方法 SQL操作方法,返回原生的标准库sql对象 数据表记录查询: 数据单条操作 数据修改/删除 总结 前言 最近一直在用GoFrame(下文简称gf)来开发项目,在熟悉业务逻辑之后就是马不停蹄的撸代码了. 之前整理过结构体和json转换的文章:GoFrame必知必会之Scan:类型转换,今天整理同样比较重要的ORM相关的文章. gf是支持ORM原生操作的,在ORM链式操作执行不了太过于复杂的SQL操作时,可以交给方法操作来处理. 这篇文章整理原生操作的常用方法,下篇文章根据整理

  • GoFrame框架ORM原生方法对象操作开箱体验

    目录 前言 开箱体验 1. ORM对象 tips 2. 数据写入 3. 数据查询(单条) 4. 数据查询(列表) 5. 数据保存 6. 批量操作 tips 7. 数据更新/删除 tips 总结 前言 最近一直在用GoFrame(下文简称gf)来开发项目,在熟悉业务逻辑之后就是马不停蹄的撸代码了. 之前整理过结构体和json转换的文章:GoFrame必知必会之Scan:类型转换,今天整理同样比较重要的ORM相关的文章. gf是支持ORM原生操作的,在ORM链式操作执行不了太过于复杂的SQL操作时,

  • JQuery扩展对象方法操作示例

    本文实例讲述了JQuery扩展对象方法操作.分享给大家供大家参考,具体如下: 应项目需求,对JQuery进行了一个扩展,需求如下: 项目中需要在浏览器右下角提示操作错误和系统提示内容,并有滑动移出和关闭的效果,所以自己写了一个效果还可以的弹出框来.就是给JQuery添加了一个方法ShowMsg. 先上代码: $.fn.extend({ ShowMsg: function (width, height, msgTitle_, msgContent_) { var TopY = 0; //初始化元素

  • vue 使用外部JS与调用原生API操作示例

    本文实例讲述了vue 使用外部JS与调用原生API操作.分享给大家供大家参考,具体如下: vue 使用外部JS 概要 在开发时我们会经常需要使用到外部的JS,这样我们需要引入外部js,然后进行使用. 实现方法 我们在开发的过程中需要使用到 sha256 将用户的密码进行加密传输. 我们对js进行一点点改造. function sha256_digest(data) { sha256_init(); sha256_update(data, data.length); sha256_final();

  • Laravel框架Eloquent ORM删除数据操作示例

    本文实例讲述了Laravel框架Eloquent ORM删除数据操作.分享给大家供大家参考,具体如下: 这篇文章,以下三个知识点希望大家能够掌握 如下: 通过模型删除 通过主键值删除 通过指定条件删除 NO.1模型删除 老样子,我们先新建一个方法,然后输入代码. namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class StudentController extends Co

  • Python 继承,重写,super()调用父类方法操作示例

    本文实例讲述了Python 继承,重写,super()调用父类方法操作.分享给大家供大家参考,具体如下: demo.py(继承,重写,super): # 父类 class Dog: def bark(self): print("汪汪叫") # 子类 继承 class XiaoTianQuan(Dog): def fly(self): print("我会飞") # 可以重写父类中的同名方法 def bark(self): # super().父类方法名 调用父类中的方

  • Python实现动态添加属性和方法操作示例

    本文实例讲述了Python实现动态添加属性和方法操作.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 class Person(): def __init__(self, name, age): self.name = name self.age = age p1 = Person('ff', '28') print(p1.name, p1.age) # 给实例对象动态添加sex属性 p1.sex = 'female' print(p1.sex

  • Laravel框架Eloquent ORM修改数据操作示例

    本文实例讲述了Laravel框架Eloquent ORM修改数据操作.分享给大家供大家参考,具体如下: 这篇文章主要讲述两个知识点 通过模型更新 结合查询语句批量更新 NO.1模型更新 在更新之前我先让你们看一下我的数据库 里面共有四条数据,好,那么我们先使用模型更新,更新我的第四条数据,代码如下: namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class StudentCo

  • springboot 增加过滤器方法操作示例

    本文实例讲述了springboot 增加过滤器方法操作.分享给大家供大家参考,具体如下: 在访问服务器时,我们需要控制用户是否允许权限,这个时候可以使用过滤器. 在springboot 配置过滤器的方法如下: 编写过滤器代码: package com.neo.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.

  • Python实现动态给类和对象添加属性和方法操作示例

    本文实例讲述了Python实现动态给类和对象添加属性和方法操作.分享给大家供大家参考,具体如下: 动态给类和对象添加属性 定义一个Person类 class Person(object): def __init__(self, name): self.name = name 给对象添加属性 # 创建2个Person,分别为p1,p2 p1 = Person('amy') print(p1.name) p1.age = 10 # 给p1对象添加属性 print(p1.age) # 输出10 p2

随机推荐