【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
}
相关推荐
光影少年几秒前
RN 架构:JS层、原生桥接层、原生渲染层 通信原理
开发语言·javascript·架构
用户693717500138413 分钟前
AI Agent 里的 Loop 到底是什么?
android·前端·后端
ALex_zry17 分钟前
C++26 std::inplace_vector 详解:零堆分配的定容向量
开发语言·c++
Rain的Java大神之路21 分钟前
高并发下的抢优惠券如何设计
后端
钟智强24 分钟前
AWS CloudGoat 实战:一个 SSRF 如何撬动整个云账户
后端
Ai拆代码的曹操25 分钟前
@Transactional 写在 private 方法上,事务根本没生效
后端
云技纵横29 分钟前
@Async 默认执行器又炸了:SimpleAsyncTaskExecutor 为什么不是线程池?
后端·面试
许彰午30 分钟前
77_Python数据清洗实战技巧
开发语言·python
程序员Agions30 分钟前
Fypro 新手快速上手与实战指南
后端
舒心的云朵34 分钟前
用三张图片详解Asp.Net 全生命周期
后端·asp.net