当前位置:网站首页>Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
2022-07-30 22:17:00 【web18224617243】
学习笔记,写到哪是哪。
接着上一篇文章:Go语学习笔记 - gorm使用 - gorm处理错误 | Web框架Gin(十)_的博客-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。不然并不会按照事务方式去处理。
小结
没啥好总结的。

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- ClickHouse 数据插入、更新与删除操作 SQL
- MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
- ML's shap: Based on FIFA 2018 Statistics (2018 Russia World Cup) team match star classification prediction data set using RF random forest + calculating SHAP value single-sample force map/dependency c
- MySQL 灵魂 16 问,你能撑到第几问?
- ClickHouse删除数据之delete问题详解
- WSL2设置默认启动用户(debian)
- 【Untitled】
- Navigation Bar----Personal Center Dropdown
- cmd (command line) to operate or connect to the mysql database, and to create databases and tables
- 关于XML的学习(一)
猜你喜欢

MySQL 5.7详细下载安装配置教程

ML's shap: Based on FIFA 2018 Statistics (2018 Russia World Cup) team match star classification prediction data set using RF random forest + calculating SHAP value single-sample force map/dependency c

navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)

Solve the problem of centos8 MySQL password ERROR 1820 (HY000) You must reset your password using the ALTER USER

MySQL compressed package installation, fool teaching

TCP 连接 三次握手 四次挥手

MYSQL JDBC图书管理系统

Difference between cookie and session

Go1.18升级功能 - 模糊测试Fuzz 从零开始Go语言

DistSQL 深度解析:打造动态化的分布式数据库
随机推荐
Installation and use of cnpm
MySQL cursors
qt使用动态库(DLL)
Golang 切片删除指定元素的几种方法
TCP 连接 三次握手 四次挥手
VS2017编译Tars测试工程
使用LVS和Keepalived搭建高可用负载均衡服务器集群
mysql创建表
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
cookie和session区别
Be careful with your dictionaries and boilerplate code
【云驻共创】HCSD大咖直播–就业指南
【Network Security Column Directory】--Penguin Column Navigation
mysql 时间字段默认设置为当前时间
MySql创建数据表
mysql获取当前时间
proxy反向代理
Collapse legacy apps
Successfully resolved ModuleNotFoundError: No module named 'Image'
MySQL 8.0.29 解压版安装教程(亲测有效)