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

目录
  • 前言
  • 开箱体验
    • 1. ORM对象
      • tips
    • 2. 数据写入
    • 3. 数据查询(单条)
    • 4. 数据查询(列表)
    • 5. 数据保存
    • 6. 批量操作
      • tips
    • 7. 数据更新/删除
      • tips
  • 总结

前言

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

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

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

上一篇文章 整理了ORM的原生方法,这篇文章根据整理的原生方法整理对应的开箱体验。

开箱体验

1. ORM对象

// 获取默认配置的数据库对象(配置名称为"default")
db := g.DB()
// 获取配置分组名称为"user"的数据库对象
db := g.DB("user")
// 使用原生单例管理方法获取数据库对象单例
db, err := gdb.Instance()
db, err := gdb.Instance("user")

tips

不用的时候不需要使用Close方法关闭数据库连接,数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭

2. 数据写入

r, err := db.Insert(ctx, "user", gdb.Map {
    "name": "王中阳",
})

3. 数据查询(单条)

虽然limit 10,但是因为我们使用的是GetOne,仍然只会返回单条数据

one, err := db.GetOne(ctx, "select * from user limit 10")
one, err := db.GetOne(ctx, "select * from user where id=100")
one, err := db.GetOne(ctx, "select * from user where id=?", 100)
one, err := db.GetOne(ctx, "select * from user where id=?", g.Slice{100})

4. 数据查询(列表)

list, err := db.GetAll(ctx, "select * from user limit 10")
list, err := db.GetAll(ctx, "select * from user where age > ? and name like ?", g.Slice{20, "%金%"})
list, err := db.GetAll(ctx, "select * from user where status=?", g.Slice{1})

5. 数据保存

数据保存是Save,插入数据是insert,区别是是否指定主键

r, err := db.Save(ctx, "user", gdb.Map {
    "id"  :  1,
    "name" : "王中阳",
})

6. 批量操作

batch := 10
_, err := db.Insert(ctx, "user", gdb.List {
    {"name": "小明"},
    {"name": "小华"},
    {"name": "小军"},
    {"name": "小高"},
}, batch)

tips

  • 其中batch参数用于指定批量操作中分批写入条数数量(默认是10)。
  • 表示批量写入数据时的每批次数量,这个数值跟你数据库服务器配置的SQL BufferSize数值有关。

7. 数据更新/删除

// db.Update/db.Delete 同理
// UPDATE `user` SET `name`='王中阳' WHERE `id`=10000
r, err := db.Update(ctx, "user", gdb.Map {"name": "王中阳"}, "id=?", 10000)
// UPDATE `user` SET `name`='王中阳' WHERE `id`=10000
r, err := db.Update(ctx, "user", "name='王中阳'", "id=10000")
// UPDATE `user` SET `name`='王中阳' WHERE `id`=10000
r, err := db.Update(ctx, "user", "name=?", "id=?", "王中阳", 10000)

tips

参数建议使用?占位符进行输入,避免SQL注入风险。

总结

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

以上就是GoFrame框架ORM原生方法对象操作开箱体验的详细内容,更多关于GoFrame ORM原生方法对象操作的资料请关注我们其它相关文章!

(0)

相关推荐

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

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

  • GoFrame ORM原生方法操作示例

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

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

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

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

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

  • GoFrame框架Scan类型转换实例

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

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

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

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

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

  • 详解PHP原生DOM对象操作XML的方法

    一.创建 创建一个新的XML文件,并且写入一些数据到这个XML文件中. /* * 创建xml文件 */ $info = array( array('obj' => 'power','info' => 'power is shutdown'), array('obj' => 'memcache','info' => 'memcache used than 90%'), array('obj' => 'cpu','info' => 'cpu used than 95%'),

  • GoFrame框架数据校验之校验对象校验结构体

    目录 前言摘要 基本概念 方法介绍 简要说明 注意问题TIPS 链式操作 示例1:单数据校验 简单示例 进阶示例 进阶示例打印结果 示例2:Map数据校验 示例3:Struct数据校验 总结 前言摘要 这篇文章将会为大家介绍GoFrame数据校验中校验对象的知识点,包括:Validator对象常用方法的介绍.单数据校验.校验Map.校验结构体的示例. 基本概念 数据校验组件提供了数据校验对象:用于数据校验统一的配置管理,支持我们便捷的进行链式操作. 方法介绍 type Validator fun

  • Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例

    本文实例讲述了Python实现对不原生支持比较操作的对象排序算法.分享给大家供大家参考,具体如下: 问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作. 解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某些值来比较对象. from operator import attrgetter class User: def __init__(self, user_id): self.user_id = use

  • 获取django框架orm query执行的sql语句实现方法分析

    本文实例讲述了获取django框架orm query执行的sql语句实现方法.分享给大家供大家参考,具体如下: 利用Django orM 可以很方便的写出很多查询,但有时候,我们需要检查这些利用 orM 生成的 SQL 语句是否正确,就需要检查这些ORM 生成的 原生的SQL 语句是否正确.经过测试有如下几种方法: 1. 通过数据库的跟踪日志,可以看到查询的语句,比如mysql 就可以配置把所有的 SQL 语句打印到日志中,但这种方式并不推荐,只是没有办法的时候才这么做. 2. 利用django

  • Laravel框架执行原生SQL语句及使用paginate分页的方法

    本文实例讲述了Laravel框架执行原生SQL语句及使用paginate分页的方法.分享给大家供大家参考,具体如下: 1.运行原生sql public function getList($data){ //获取前端传过来的参数 $user = $data['userId']; $office = $data['officeId']; $key = $data['oneKeySearch']; //进行模糊搜索和联合查询 $where = 'and 1=1 '; if($key!=null) {

  • Django框架ORM数据库操作实例详解

    本文实例讲述了Django框架ORM数据库操作.分享给大家供大家参考,具体如下: 测试数据:BookInfo表 PeopleInfo表 一.增加 1.save: 对象 = 模型类( 字段名 = 值, 字段名 = 值, - ) 对象.save() 例: >>> book = BookInfo( ... name='python入门', ... pub_date='2010-1-1' ... ) >>> book.save() >>> book <B

  • 基于js对象,操作属性、方法详解

    一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascript中,已经存在一些标准的类,例如Date.Array.RegExp.String.Math.Number等等,这为我们编程提供了许多方便.但对于复杂的客户端程序而言,这些还远远不够. 与Java不同,Java2提供给我们的标准类很多,基本上满足了我们的编程需求,但是Javascript提供的标准类很

随机推荐