美文网首页重新撸码
go-zero 数据库事务处理callback封装(单机)

go-zero 数据库事务处理callback封装(单机)

作者: 大黄蜂阿天 | 来源:发表于2022-11-08 08:50 被阅读0次

    场景

    mysql innodb 存储引擎在业务需要满足事务的一些情况

    具体代码

    func (context *ServiceContext) Trans(fn func(session sqlx.Session) error) error {
    
        return context.Mysql.Transact(func(session sqlx.Session) error {
            return fn(session)
        })
    
    }
    

    具体使用

    # 需要做兼容处理
    func (m *defaultRoleModel) Insert(ctx context.Context, data *Role, session sqlx.Session) (sql.Result, error) {
        iotRoleIdKey := fmt.Sprintf("%s%v", cacheIotRoleIdPrefix, data.Id)
        ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
            query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, roleRowsExpectAutoSet)
            if session != nil {
                return session.ExecCtx(ctx, query, data.Id, data.Pid, data.Name, data.Remarks, data.Sort, data.DeleteTime)
            }
            return conn.ExecCtx(ctx, query, data.Id, data.Pid, data.Name, data.Remarks, data.Sort, data.DeleteTime)
        }, iotRoleIdKey)
        return ret, err
    }
    
    // callback中只要return err 事务就会失败
    l.svcCtx.Trans(func(session sqlx.Session) error {
        // step 1
        // step 2
        // ...
        // step n
         return nil
    }
    

    相关文章

      网友评论

        本文标题:go-zero 数据库事务处理callback封装(单机)

        本文链接:https://www.haomeiwen.com/subject/qkpbtdtx.html