爱摸鱼的Demon
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

爱摸鱼的Demon

我的地盘,欢迎光临。
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C#

  • Golang

    • Go

    • Gin

    • GORM

      • Gorm初始化
      • Gorm之增删改查
      • Gorm之查询进阶版
      • Gorm之根据外键关联表
      • Gorm之关联进阶版
      • Gorm之事务
        • 1、查询bank中用户的所有信息
        • 2、bank转账操作
  • 后端技术
  • Golang
  • GORM
DemonW-X
2025-11-13
目录

Gorm之事务

有一个bank表,它存着相关用户的数据:

初始化表

//bank.go
type Bank struct {
	Id       int
	Username string
	Balance  float32
}

func (Bank) TableName() string {
	return "bank"
}

//controller.go
type BankController struct {
	BaseController
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 1、查询bank中用户的所有信息

func (con BankController) Index(c *gin.Context) {
	bankList := []models.Bank{}
	//查询所有数据
	models.DB.Preload("Lesson").Find(&bankList)
	c.JSON(http.StatusOK, gin.H{
		"result": bankList,
	})
}
1
2
3
4
5
6
7
8

# 2、bank转账操作

func (con BankController) Tran(c *gin.Context) {
	//张三给李四转账
	tx := models.DB.Begin()
	//在事务中执行一些db操作时,不可以用db,应该使用tx
	defer func() {
		if r := recover(); r != nil {
			//遇到错误时回滚事务
			tx.Rollback()
			//转账失败
			con.Error(c)
			return
		}
	}()
	u1 := models.Bank{Id: 1}
	tx.Find(&u1)
	//张三账户转出100元
	u1.Balance = u1.Balance - 100
	if err := tx.Save(&u1).Error; err != nil {
		//遇到错误时回滚事务
		tx.Rollback()
		//转账失败
		con.Error(c)
		return
	}
	//panic("异常")
	u2 := models.Bank{Id: 2}
	tx.Find(&u2)
	//李四账户转入100元
	u2.Balance = u2.Balance + 100
	if err := tx.Save(&u2).Error; err != nil {
		//遇到错误时回滚事务
		tx.Rollback()
		//转账失败
		con.Error(c)
	}
	//否则,提交事务
	tx.Commit()
	//转账成功
	con.Success(c)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
编辑 (opens new window)
Gorm之关联进阶版

← Gorm之关联进阶版

最近更新
01
Gorm之关联进阶版
11-13
02
Gorm之根据外键关联表
11-13
03
Gorm之查询进阶版
11-13
更多文章>
Theme by Vdoing | Copyright © 2022-2025 爱摸鱼的Demon | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式