【go】xorm CRUD 批量新增及事务

2023-10-27

1 xorm

xorm是一个Go语言ORM库,其文档:http://xorm.topgoer.com/

2 基础操作 CRUD

2.1 查

2.1.1 ID查询

  • ID:参数接收主键字段的值
var user User
engine.Id(1).Get(&user)
  • sql语句:select * from user where id = 1

2.1.2 Where查询

  • Where:类sql语句
engine.Where('user_name = ? and pwd = ?', 'davie', '123').Get(&admin)
// 或
engine.Where('user_name = ?','davie').Where('pwd = ?','123').Get(&admin)
  • sql语句:select * from user where user_name = 'davie' and pwd = '123'

2.1.3 Get查单条

result := User
err := engine.Where("student_name = ?", OrgName).Get(&result)

2.1.4 Find查多条

results := make([]User, 0)
err := engine.Where("student_name = ?", OrgName).Find(&results)

2.1.5 Count计数

engine.Count(&user)

2.2 增

2.1.1 单增

var user
engine.Insert(&user)

2.1.2 批量增

// user为切片
user := []User{user1,user2}
engine.Insert(&user)

2.3 改

user:= students.table1{
		age: 12,
	}
engine.Where("name = ?","new").Update(&user)

2.4 删

engine.Where("name = ?","new").Delete(&user)

3 事务

在有需要的批量操作数据时,需用到事务。在xorm中,事务操作和Session联系在一起。一共三个步骤,分别为:创建session对象,Begin事务开始执行,Commit提交事务。中间为具体的数据库操作。

  • 事务代码:
// 创建事务
session := engine.NewSession()
defer session.Close()

// 事务开始
err := session.Begin()
if err != nil {
    return err
}

// 事务相关操作
_, err := dao.Students.DeleteStudents(session, Name)
if err != nil {
// 事务回滚
    session.Rollback()
    return err
}

// 事务提交
err = session.Commit()
if err != nil{
    return err
}
  • 测试函数,按指定Name删除数据:
func (*dStudents) DeleteStudents(session *xorm.Session, Name string) (int64, error) {
	result := students.table1{
		DeletedAt: time.Now().UnixMilli(),
	}
	return session.Table("table1").Where("student_name = ?", OrgName).Where("deleted_at = ?", 0).Update(&result)
}

4 Reference

Go语言学习教程:xorm表基本操作及高级操作:
http://www.taodudu.cc/news/show-732070.html?action=onClick

Go-MySQL(四)XORM:
https://blog.csdn.net/weixin_41922289/article/details/116282272

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【go】xorm CRUD 批量新增及事务 的相关文章

  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • Go 中的 WebP 编码器/解码器

    是否有一个完整的 WebP 编码器和解码器与当前每周 或可分叉 兼容 它的速度与标准 png 相当吗 这个人在 GitHub 上有一个包 其中包含 WebP 的编码器和解码器 https github com chai2010 webp h
  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • 按引用或按值扫描功能

    我有以下代码 statement SELECT id from source where mgmt 1 var exists string errUnique dr db QueryRow statement mgmt Scan exist
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器
  • 我应该避免在 golang 中使用单例包吗?

    现在我有一个包裹store包含以下内容 package store var db Database func Open url string error open db connection func FindAll model inter
  • 如何在 Ubuntu 中将 Go 程序作为守护进程启动?

    在 Ubuntu 中将 Go 程序作为守护进程启动的正确方法是什么 然后我将使用 Monit 对其进行监控 我应该做这样的事情 go run myapp go 我应该考虑 Go 特有的事情吗 您应该为您的程序构建一个可执行文件 go bui
  • 根据值匹配数组

    我使用以下代码来解析 yaml 并应得到输出为runners对象和函数build应更改数据结构并根据以下结构提供输出 type Exec struct NameVal string Executer string 这是我尝试过的 但我不知道
  • 交叉编译共享库

    我想知道是否有可能 如果是的话 如何 与 Go 交叉编译共享库 假设我有这段代码 package main import C export DoubleIt func DoubleIt x int int return x 2 func m
  • 为什么结构体的字段是“非名称”[重复]

    这个问题在这里已经有答案了 这段代码不起作用 它抱怨 j Bar 是一个 非名字 package main import fmt import os type foo struct Bar string Baz int func main
  • 如何捕获或抑制 Go(lang) 测试的 stdout?

    如何捕获或抑制标准输出以进行 Go 测试 我正在尝试自学 go lang 测试 在下面的代码中 myshow LoadPath 将大量信息打印到 stdout 这是正常的副作用 然而 当我运行 go test 时 它确实会产生非常嘈杂的输出
  • Golang SSL TCP套接字证书配置

    我正在创建一个 Go TCP 服务器 不是 http s 并且尝试将其配置为使用 SSL 我有一个 StartCom 免费 SSL 证书 我正在尝试使用它来完成此任务 我的服务器代码如下所示 cert err tls LoadX509Key
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • 如何从 gorm 中的模型获取表名?

    是否可以获得模型的表名 我发现可以从模型结构但我不知道如何正确地做到这一点 我没有找到该结构的任何初始化 user User tableName db 对于 Gorm v2 根据https github com go gorm gorm i
  • 使用结构解析 YAML

    我创建了以下 YAML 文件来提供用户需要提供的一些配置 Environments sys1 models app type app1 service type fds app type app2 service type era sys2

随机推荐

  • hadoop集群优化(三):开启日志汇聚服务

    文章目录 说明 分享 操作 修改配置 分发 重启集群 hadoop 自身脚本 自定义脚本 总结 说明 hadoop平台有大量组件 上线后yarn执行全平台任务 各任务日志分散在集群各节点 为了高效追踪任务执行状态 确认异常时问题 hadoo
  • 【概率论与数理统计】猴博士 笔记 p38-40 切比雪夫不等式、大数定律、中心极限定理

    文章目录 切比雪夫不等式 大数定律 中心极限定理 切比雪夫不等式 题干特征 求的P里面有不等式 求的概率的事件是某个绝对值 求的P里面的不等式符号与外面的不等式符号相反 满足以上特征就要用到切比雪夫不等式 做法 注意 公式求出来的是绝对值大
  • usrp-b210在VS2013上的工程配置与使用方法

    开发环境确认 硬件平台 USRP B210 软件平台 Win7 x64 VS2013 uhd硬件开发环境搭建 参阅https blog csdn net yinchao163 article details 79893770 VS2013下
  • numpy 保存 csv 文件

    方法1 使用numpy包 save numpy as csv import numpy as np np savetxt frame array fmt d delimiter None frame 文件 array 存入文件的数组 fmt
  • 股票期货盈亏比的计算,胜率与盈亏比的关系

    胜率 目标周期内盈利的交易次数占总交易次数的比例 盈亏比 平均盈利金额与平均亏损金额的比值 比如 盈利次数 70 盈利总金额 7000 亏损次数 30 亏损总金额 7500 那么盈亏比 7000 70 7500 30 0 4 它可以这样理解
  • js替换textarea文本中连续换行和首尾的换行

    1 将多个连续 r n或 n替换为 br string replace s r n s g br 2 去除首尾的 br string replace br br g id html replace s r n s g br replace
  • [4]Spring以注解的方式进行Bean的实例化和属性注入

    在进行Spring开发时所需要的基础jar包有 当需要在Spring中使用注解的时候 还需要导入 在配置文件中引入新的约束
  • R语言的基本数学运算

    目录 一 对象命名原则 二 基本数学运算 2 1 四则运算 2 2 余数和整除 2 3 次方或平方根 2 4 绝对值 2 5 exp 与对数 2 6 科学符号e 2 7 圆周率与三角函数 2 8 四舍五入函数 2 9 近似函数 2 10 阶
  • 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    一 什么是Quartz 什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目 完全由Java开发 可以用来执行定时任务 类似于java util Timer 但是相较于Timer
  • SOLIDWORKS 2021新增功能-Simulation交互名称的更改

    如果您已阅读SOLIDWORKS 2021 的新增功能文档 你可能会注意到SOLIDWORKS Simulation列出的许多更新和改进 本篇文章主要给大家总结了SOLIDWORKS Simulation 2021中一些交互名称的更改 让我
  • bigdecimal保留4位小数_BigDecimal类

    import java math BigDecimal public class BigDecimaDemo public static void main String args TODO Auto generated method st
  • 【星海出品】windows DOS 进程管理

    查看端口占用情况 netstat ano 查看进程列表 tasklist 进程过滤查看 tasklist find java 删除进程 taskkill F IM java exe 打开进程 C java txt BAT脚本删除进程 tes
  • 2021-06-17springboot本地正常启动,部属服务器找不到外部文件 file:/apps/xxx/xxx/xxx.jar!/BOOT-INF/classes!/

    springboot本地正常启动 部属服务器找不到外部文件 file apps xxx xxx xxx jar BOOT INF classes 废话不多 直接上代码 一 获取本地路径 1 在本地启动时候 path xxx xxx xxx
  • 程序获取

    程序获取 机器学习 深度学习程序和数据获取方式 目录 程序获取 机器学习 深度学习程序和数据获取方式 程序获取方式1 程序获取方式2 程序获取方式3 程序获取方式4 程序获取方式5 程序获取方式6 程序获取方式1 私信博主或者博客底部联系博
  • plsql 查询结果窗口 不正常

    plsql 查询结果窗口 不正常 无法更新 kkdengdai123 浏览 2446 次 2015 03 24 11 25 2016 06 23 16 26 最佳答案 你的sql语句中有全角字符的空格 你需要把它删除掉 换成半角字符的空格就
  • c# TcpClient判断连接状态是否断开连接

    首先明确一个问题 TcpClient是对scoket的封装 TcpClient Client才是原本的socket对象 其次不能用client Client Connected或者client Connected来判断是不是还在连接 因为这
  • javase部分

    javase基础部分 第一章 标识符 什么是标识符 标识符的定义规则 常量 什么是常量 变量 什么是变量 变量的声明格式 变量的声明 第二章 基本数据类型 基本数据类型概述 整数类型 浮点数类型 编码和字符集 什么是编码 转义字符 字符类型
  • 完美国际服务器管理修改经验倍数,《完美国际》全服1.5倍经验 7天神速升级

    作为夏日里的第一波 完美世界国际版 完美如意签 给我们带来了接连不断的惊喜 玩家们的脸上的表情都随之丰富了起来 因为揭开如意签的瞬间 那出乎意料的惊讶和溢于言表的喜悦 就已经令玩家们的脸上不知用怎样的表情来表达了 现在 完美世界国际版 夏日
  • IDEA的快捷键大全

    快捷键 说明 IntelliJ IDEA 的便捷操作性 快捷键的功劳占了一大半 对于各个快捷键组合请认真对待 IntelliJ IDEA 本身的设计思维是提倡键盘优先于鼠标的 所以各种快捷键组合层出不穷 对于快捷键设置也有各种支持 对于其他
  • 【go】xorm CRUD 批量新增及事务

    文章目录 1 xorm 2 基础操作 CRUD 2 1 查 2 1 1 ID查询 2 1 2 Where查询 2 1 3 Get查单条 2 1 4 Find查多条 2 1 5 Count计数 2 2 增 2 1 1 单增 2 1 2 批量增