go-gf框架两个表以事务方式写入示例

这段代码展示了如何在Go中进行数据库事务操作,包括开启事务、插入支付和套餐订单记录、处理错误以及提交或回滚事务。使用gtime.Now()获取当前时间,并通过自定义错误处理函数liberr.ErrIsNil来管理异常情况。
摘要由CSDN通过智能技术生成

下面是对每一行代码的中文解释:

// 创建数据库连接对象
var tx gdb.TX

这行代码声明了一个名为tx的变量,类型为gdb.TX,表示数据库事务对象。

// 开启事务
if tx, err = g.DB().Ctx(ctx).Begin(ctx); err == nil {

这行代码通过在数据库连接(g.DB())上调用Begin方法以给定的上下文(ctx)开始一个事务。如果没有错误(err == nil),则将返回的事务对象赋值给变量tx

// 获取当前时间
CurrentTime := gtime.Now()

这行代码使用gtime.Now()函数获取当前时间,并将其赋值给变量CurrentTime

// 写支付记录
_, err4 := dao.PayTradeOrder.Ctx(ctx).TX(tx).Insert(appdo.PayTradeOrder{
    // 支付记录字段...
})

这行代码将一个新的支付记录插入数据库。它使用dao.PayTradeOrder.Ctx(ctx).TX(tx)指定了上下文和事务对象,然后使用Insert方法将appdo.PayTradeOrder结构体的字段插入数据库。

// 写套餐订单记录
_, err5 := systemdao.UserBuySetMeal.Ctx(ctx).TX(tx).Insert(do.UserBuySetMeal{
    // 套餐订单记录字段...
})

这行代码将一条新的套餐订单记录插入数据库。它使用systemdao.UserBuySetMeal.Ctx(ctx).TX(tx)指定了上下文和事务对象,然后使用Insert方法将do.UserBuySetMeal结构体的字段插入数据库。

// 提交事务
if err := tx.Commit(); err != nil {
    // 处理提交事务错误
    liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:提交事务失败"), "创建下单错误:提交事务失败")
    return
}

这行代码提交事务。如果提交事务发生错误,会通过liberr.ErrIsNil函数处理错误。

// 打印结果
fmt.Println("事务操作完成")

这行代码打印结果信息,输出"事务操作完成"。

} else {
    // 处理开启事务错误
    liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:事务操作失败"), "创建下单错误:事务操作失败")
}

这行代码处理开启事务错误,通过liberr.ErrIsNil函数处理错误。

完整代码 供参考

// 创建数据库连接对象
			var tx gdb.TX
			// 开启事务
			if tx, err = g.DB().Ctx(ctx).Begin(ctx); err == nil {
				// 获取当前时间
				CurrentTime := gtime.Now()

				// 写支付记录
				_, err4 := dao.PayTradeOrder.Ctx(ctx).TX(tx).Insert(appdo.PayTradeOrder{
					OrderNo:        "2023245231231",                         // 订单号
					//写入其他数据字段
				})
				if err4 != nil {
					// 回滚事务
					err := tx.Rollback()
					if err != nil {
						liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建支付数据回滚事务错误"), "创建下单错误:创建支付数据回滚事务错误")
						return
					}
					// 处理错误
					liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建支付数据错误"), "创建下单错误:创建支付数据错误")
					return
				}

				// 写套餐订单记录
				_, err5 := systemdao.UserBuySetMeal.Ctx(ctx).TX(tx).Insert(do.UserBuySetMeal{
					UserId:         userid,                                // 用户id
				   //写入其他数据字段
				})
				if err5 != nil {
					// 回滚事务
					err := tx.Rollback()
					if err != nil {
						liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建套餐订单回滚事务数据错误"), "创建下单错误:创建套餐订单回滚事务数据错误")
						return
					}
					// 处理错误
					liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建套餐订单数据错误"), "创建下单错误:创建套餐订单数据错误")
					return
				}
				// 提交事务
				if err := tx.Commit(); err != nil {
					// 处理提交事务错误
					liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:提交事务失败"), "创建下单错误:提交事务失败")
					return
				}

				// 打印结果
				fmt.Println("事务操作完成")
			} else {
				// 处理开启事务错误
				liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:事务操作失败"), "创建下单错误:事务操作失败")
			}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡忘_cx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值