beego中添加数据事务处理的两种方式


方法一:

func AddOrganization(organization *Organization) (errorCode common.ErrorCode) {
   o:=orm.NewOrm()
   defer func() {
      if e := recover(); e != nil {
         o.Rollback()
         errorCode = *common.DATABASE_ADD_ERROR
      }
   }()
   o.Begin()
   id, err := o.Insert(organization)
   if err!=nil {
      util.FileLogs.Error("新增机构失败:" + err.Error())
      panic(err)
   }
   var networkOrg NetworkOrg
   networkOrg.NetworkId=organization.NetworkId
   networkOrg.OrgId=id
   networkOrg.JoinTime=time.Now()
   _, err = o.Insert(&networkOrg)

   if err!=nil {
      util.FileLogs.Error("新增网络机构对应关系失败:" + err.Error())
      panic(err)
   }
   err=nil
   o.Commit()
   errorCode = *common.SUCCESS

   return errorCode

}

 




方法二:
定义一个异常处理的方法
package lib

type Exception struct {
   Try func()
   Catch func(interface{})
   Finally func()
}

func (t Exception) Do() {
   if t.Finally != nil {
      defer t.Finally()
   }
   if t.Catch != nil {
      defer func() {
         if r := recover(); r != nil {
            t.Catch(r)
         }
      }()
   }
   t.Try()
}

然后在需要用事务的地方套用

func AddOrganization(organization *Organization) (errorCode common.ErrorCode) {
    o:=orm.NewOrm()

    lib.Exception{
        Try: func() {
            o.Begin()
            id, err := o.Insert(organization)
            if err!=nil {
                util.FileLogs.Error("新增机构失败:" + err.Error())
                panic(err)
            }
            var networkOrg NetworkOrg
            networkOrg.NetworkId=organization.NetworkId
            networkOrg.OrgId=id
            networkOrg.JoinTime=time.Now()
            _, err = o.Insert(&networkOrg)

            if err!=nil {
                util.FileLogs.Error("新增网络机构对应关系失败:" + err.Error())
                panic(err)
            }
            err=nil
            o.Commit()
            errorCode = *common.SUCCESS

        },
        Catch: func(e interface{}) {
            o.Rollback()
            errorCode=*common.DATABASE_ADD_ERROR
        },

    }.Do()


    return errorCode

}

 



参考
https://www.cnblogs.com/chenqionghe/p/12958025.html

https://www.cnblogs.com/makelu/p/11226974.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM