Go语学习笔记 - gorm使用 - 事务操作 | Web框架Gin(十一)

学习笔记,写到哪是哪。

接着上一篇文章:Go语学习笔记 - gorm使用 - gorm处理错误 | Web框架Gin(十)_剑客阿良_ALiang的博客-CSDN博客

在项目中事务处理,回滚操作还是比较常见的需求。

本文测试一下gorm的事务处理效果。

项目地址:github地址

如果没有事务方面需求,也是可以全局禁用事务的,官方给出的性能提升是30%。

在student_service下新增TestTransaction方法。

方法代码如下:

//测试事务效果
func (t StudentImpl) TestTransaction() rsp.ResponseMsg {
	log.Logger.Info("测试事务效果")
	_db := mysql.GetDB()
	_db.Transaction(func(tx *gorm.DB) error {
		tx.Create(&db_entity.Student{
			Name: "张飞", Age: 200,
		})
		var _student db_entity.Student
		if _err := tx.Where("del_flag = 1").First(&_student).Error; _err != nil {
			return _err
		}
		fmt.Println(_student)
		return nil
	})
	return *rsp.SuccessMsg("测试成功")
}

简单说明

1、使用Transaction定义需要处理的事务方法,先创建一条数据,再构造一个异常。

2、如果异常了,按照事务处理方式,创建的数据也不会提交。

controller层增加接口代码,如下:

//测试事务效果
func (s StudentController) TestTransaction(context *gin.Context) {
	log.Logger.Info("测试事务效果")
	_rsp := services.StudentServ.TestTransaction()
	context.JSON(http.StatusOK, _rsp)
}

测试效果

 

 

可以看出数据并没有插入到表中。

注意 

感觉有个地方还是容易出错的,在Transaction定义事务方法的时候,方法内不要在使用db去处理,而是传参tx。不然并不会按照事务方式去处理。

小结

没啥好总结的。

猜你喜欢

转载自blog.csdn.net/zhiweihongyan1/article/details/125655126