使用 GoFrame ORM
组件进行事务操作非常简便、安全,可以通过两种操作方式来实现。
- 常规操作:通过
Begin
开启事务之后会返回一个事务操作接口gdb.TX
,随后可以使用该接口进行如之前章节介绍的方法操作和链式操作。常规操作容易漏掉关闭事务,有一定的事务操作安全风险。 - 闭包操作:通过
Transaction
闭包方法的形式来操作事务,所有的事务逻辑在闭包中实现,闭包结 束后自动关闭事务保障事务操作安全。并且闭包操作支持非常便捷的 嵌套事务,嵌套事务在业务操作中透明无感知。
提示
我们推荐事务操作均统一采用 Transaction
闭包方式实现。
接口文档: https://pkg.go.dev/github.com/gogf/gf/v2/database/gdb#TX
📄️ ORM事务处理-常规操作
常规的事务操作方法为 Begin/Commit/Rollback,每一个方法指定特定的事务操作。开启事务操作可以通过执行 db.Begin 方法,该方法返回事务的操作接口,类型为 gdb.Tx,通过该对象执行后续的数据库操作,并可通过 tx.Commit 提交修改,或者通过 tx.Rollback 回滚修改。
📄️ ORM事务处理-闭包操作
一、痛点描述
📄️ ORM事务处理-嵌套事务
从 GoFrame ORM 支持数据库嵌套事务,嵌套事务在业务项目中用得比较多,特别是业务模块之间的相互调用,保证各个业务模块的数据库操作都处于一个事务中,其原理是通过传递的 context 上下文来隐式传递和关联同一个事务对象。需要注意的是,数据库服务往往并不支持嵌套事务,而是依靠 ORM 组件层通过 Transaction Save Point 特性实现的。同样的,我们推荐 使用 Transaction 闭包方法来实现嵌套事务操作。为了保证文档的完整性,因此我们这里仍然从最基本的事务操作方法开始来介绍嵌套事务操作。