【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
}
相关推荐
biter down6 小时前
14:pytest-order 插件 顺序控制案例
开发语言·python·pytest
郝学胜-神的一滴6 小时前
Qt 高级开发 009: C++ Lambda 表达式
开发语言·c++·qt·软件构建
㳺三才人子6 小时前
初探 Flask
后端·python·flask·html
星栈独行6 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
石山代码6 小时前
C++ 轻量级日志系统
开发语言·c++
Java爱好狂.6 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
小技与小术7 小时前
玩转Flask
开发语言·python·flask
SilentSamsara7 小时前
Python 性能优化:tracemalloc、profiling 与 C 扩展加速
开发语言·python·青少年编程·性能优化
装不满的克莱因瓶7 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn