golang gorm 事务管理器

348 阅读1分钟

golang gorm 事务管理器

github.com/erkesi/gorm…

优势

  • 业务代码与技术代码隔离
  • 事务管理器抽象成接口,更具备可测试性

使用示例

具体可以看github里的单元测试

mainDB, err := gorm.Open(sqlite.Open("main.db"), &gorm.Config{})
if err != nil {
        panic("failed to connect database")
}
backupDB, err := gorm.Open(sqlite.Open("backup.db"), &gorm.Config{})
if err != nil {
        panic("failed to connect database")
}
// 构建事务管理器
txManager := NewGormTxManager(mainDB, backupDB)
ctx := context.TODO()
// open && close DB
ctx, txid := txManager.OpenMainTx(ctx)
defer txManager.CloseMainTx(ctx, txid, &err)  

// Create sql
err := txManager.MustMainTx(ctx).WithContext(ctx).Create(&Product{Code: "D43", Price: 100}).Error
if err != nil {
    return err
}
// Create sql
err = txManager.MustMainTx(ctx).WithContext(ctx).Create(&User{Name: "D42"}).Error