beego v2 事务支持 不可思议

849 阅读1分钟

1、beego v1 版本事务支持

o := orm.NewOrm()
o.Begin()
defer func(o orm.Ormer) {
   if err := recover(); err != nil {
      o.Rollback()
      panic(err)
   }
}(o)
o.Insert()
o.Commit()

直接通过orm.Ormer 就可以开启事务,提交事务,回滚,sql 通过 orm.ormer 执行就行

2、beego v2 版本事务支持

o := orm.NewOrm()
tx, _ := o.Begin()
tx.Commit()
tx.Insert()
tx.Rollback()

通过 orm.txOrmer 提交,sql 也必须是 tx 执行的 才行,必须注意这一点

总结 beego v1 版本我可以通过不同model 之间传递 orm.ormer 对象来保证,不同model 在同一个事务里面执行。现在beego v2 必须要 使用 orm.txOrmer,也就是 orm.ormer.Begin()的返回值tx,来执行,这样我就没办法在多个model 之间传递 db连接,而且,没办法使用我封装的baseModel 中的方法对象。