【go】gorm\xorm\ent事务处理

文章目录

  • [1 gorm](#1 gorm)
      • [1.1 开启事务](#1.1 开启事务)
      • [1.2 执行操作](#1.2 执行操作)
      • [1.3 提交或回滚](#1.3 提交或回滚)
  • [2 xorm](#2 xorm)
      • [2.1 开启事务](#2.1 开启事务)
      • [2.2 执行操作](#2.2 执行操作)
      • [2.3 提交或回滚](#2.3 提交或回滚)
  • [3 ent](#3 ent)
      • [3.1 开启事务](#3.1 开启事务)
      • [3.2 执行操作](#3.2 执行操作)
      • [3.3 提交或回滚](#3.3 提交或回滚)

前言:本文介绍golang三种orm框架对数据库事务的操作

1 gorm

Begin开启事务
tx *gorm.DB

1.1 开启事务

go 复制代码
tx := db.Begin()

1.2 执行操作

go 复制代码
if err := tx.Create(&User{Name: "Amy"}).Error; err != nil {
    tx.Rollback()
    return err
}

1.3 提交或回滚

go 复制代码
if err := tx.Commit().Error; err != nil {
    tx.Rollback()
    return err
}

2 xorm

NewSession开启事务
tx *xorm.Session

2.1 开启事务

go 复制代码
tx: = db.NewSession()
defer tx.Close()
err = tx.Begin()
if err != nil {
	return err
}

2.2 执行操作

go 复制代码
_, err := tx.Table("test").Insert(&users)
if err != nil {
	tx.Rollback()
	return err
}

2.3 提交或回滚

go 复制代码
err = tx.Commit()
if err != nil {
	tx.Rollback()
	return err
}

3 ent

Tx开启事务
tx *ent.Tx

3.1 开启事务

go 复制代码
tx, err := db.Tx(ctx)
if err != nil {
	return err
}

3.2 执行操作

go 复制代码
err := tx.User.Create().
	SetID("aaa").
	SetAction("create").
	SetName("amy").Save(ctx)
}
if err != nil {
	tx.Rollback()
	return err
}

3.3 提交或回滚

go 复制代码
if err := tx.Commit(); err != nil {
	tx.Rollback()
	return err
}
相关推荐
奈斯先生Vector1 分钟前
AIGC 视频生成换个拍法:用 Kling Video 把一张人物图变成可剪辑的短故事
开发语言·人工智能·windows·python·aigc·音视频
IT_陈寒1 分钟前
Java的HashMap竟然不是线程安全的,现在才知道!
前端·人工智能·后端
IT_陈寒2 分钟前
React hooks闭包陷阱让我加了一宿班
前端·人工智能·后端
不一样的少年_2 分钟前
设计稿里的图片明明很清晰,为什么到了手机上却糊了?一文讲透 DPR、压缩与格式选择
前端·后端·图片资源
卷无止境3 分钟前
当"精简主义"住进AI编程助手:Ponytail深度解读
后端·python·fastapi
一木 之林3 分钟前
五、C++ 新特性、关键字与编译原理(进阶)(一)
c语言·开发语言·c++
兔子零10248 分钟前
我给 Pi Coding Agent 做了一个桌面控制台:Pi-Harness
前端·javascript·后端
秋名RG9 分钟前
Java IO 体系深度剖析:从流式编程到 JDK 21 高并发陷阱
java·开发语言
名字还没想好☜11 分钟前
Go 的 TCP 粘包与拆包:用长度前缀协议 + bufio 正确读消息
后端·tcp/ip·golang·go·php
Pocker_Spades_A19 分钟前
Python快速入门专业版(五十九):re实战——用正则爬取豆瓣电影Top250(全流程解析)
开发语言·python