【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
}
相关推荐
非凡ghost3 分钟前
PixPin截图工具(支持截长图截动图) 中文绿色版
前端·javascript·后端
武子康4 分钟前
大数据-133 ClickHouse 概念与基础|为什么快?列式 + 向量化 + MergeTree 对比
大数据·后端·nosql
脚踏实地的大梦想家19 分钟前
【Go】P11 掌握 Go 语言函数(二):进阶玩转高阶函数、闭包与 Defer/Panic/Recover
开发语言·后端·golang
秋空樱雨28 分钟前
C++入门
开发语言·c++
咬_咬1 小时前
C++仿mudo库高并发服务器项目:Buffer模块
服务器·开发语言·c++·缓冲区·buffer·muduo库
江公望1 小时前
Qt qmlplugindump浅谈
开发语言·qt·qml
曦樂~1 小时前
【Qt】文件操作/事件--mainwindow做编辑器
开发语言·qt
用户68545375977691 小时前
🔥 服务熔断降级:微服务的"保险丝"大作战!
后端
Tech有道1 小时前
拼多多「面试官问我:LRU 和 LFU 你选谁?」我:看场景啊哥!😂
后端
用户68545375977691 小时前
🎬 开场:RPC框架的前世今生
后端