美文网首页重新撸码
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封装(单机)

    场景 mysql innodb 存储引擎在业务需要满足事务的一些情况 具体代码 具体使用

  • 分布式事务和CAP,BASE理论(一)

    分布式事务 对于单机系统我们很容易实现一套满足ACID的事务处理系统,但是在分布式数据库中,数字分散在各台不同的机...

  • 服务端通过request向豆瓣api请求详细数据

    request的上层封装,用了原生的promise,对callback形式的request做了封装可以支持awai...

  • 关于 tp5 事务操作总结

    前提: 使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用...

  • tp6进行事务操作

    使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 Inn...

  • SpringBoot(4)

    四 今日目标 事务处理 概念介绍 什么是事务处理? 事务处理就是要保持数据库的安全性。 事务要么完全地执行,要么完...

  • 数据库的未来趋势

    数据库的处理方式,简单来说可以分为一下两种: 1、联机事务处理OLTP,主要执行基本的日常事务处理,比如数据库记录...

  • RxJava学习笔记(一)

    1. 用 RxJava 封装回调方法 CallBack https://glumes.com/post/andro...

  • Mysql集群PXC (入门)

    为什么需要MySQL集群 传统数据库单机单节点,容灾性能差,例如数据库挂掉,整个网站就会挂掉。单机单节点的数据库性...

  • retrofit callback模式的封装

    几类请求的实现和通用性的封装 String和json类型: 使用的接口 retrofit 定义通用的接口方法: 踩...

网友评论

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

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