首页 > 其他 > 详细

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

时间:2020-07-09 13:11:31      阅读:73      评论:0      收藏:0      [点我收藏+]

方法一:

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

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

原文:https://www.cnblogs.com/yuluoxingkong/p/13272927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!