Spring项目中的@Transactional事务管理

项目中,很多时候数据是相对的,

例如:用户A付钱给用户B,那么用户A的账户需被扣钱。所扣的钱需被加到用户B的账户上;

但是在项目中,我们的代码走向是,先扣除了用户A的账户钱,这个时候,数据已经被写入SQL中,并且被提交,如果这个时候出现代码错误,无法往下继续走时,会导致,用户B并没有获取到本该增加的钱,其实这个时候很容易出现问题

这个时候就需要引入@Transactional事务管理;将这个注解放置在所需要的放置的service层的对应方法上;

这个时候,@Transactional将会作用于该方法上,@Transactional注解是将方法体内执行的代码。先预先暂存在一个地方

队友只有当方法内的代码全部成功走完之后,才会对数据进行成功操作;如果中间出现错误的代码,导致执行不下去时,会将前面已经执行成功的数据,直接false,不会将对应数据提交;

这个一般来说我们会使用在增删改这三个操作的前面加上@Transactional,查询的话,就不需要加上

例如:我们需要更新数据库表中老师的内容:如果在进行更新时,出现错误时,是否会被真的修改掉??

controller层:

package com.cmj.controller;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.DeleteMapping;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.PutMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import com.cmj.entity.Teacher;

import com.cmj.service.UserService;

import com.github.pagehelper.PageInfo;

@RestController

@RequestMapping(“/teacher”)

public class TeacherController {

@Autowired

private UserService userService;

// 修改老师

@PutMapping(“/update”)

public String update(@RequestBody Teacher teacher) {

return userService.update(teacher);

}

}

2、Mapper数据

TeacherMapper.java

package com.cmj.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

import com.cmj.entity.Teacher;

@Mapper

public interface TeacherMapper {

public void updateTeacher(Teacher teacher);

}

TeacherMapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>

UPDATE `teacher` SET

`pass_word`=#{passWord}

WHERE (`name`=#{name})

3、service执行代码:

package com.cmj.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import com.cmj.dao.TeacherMapper;

import com.cmj.entity.Teacher;

import com.github.pagehelper.PageHelper;

import com.github.pagehelper.PageInfo;

@Service

public class UserService {

@Autowired

private TeacherMapper teacherMapper;

// 修改老师

@Transactional

public String update(Teacher teacher) {

teacherMapper.updateTeacher(teacher);

int i = 1 / 0;

teacherMapper.deleteByName(“nini”);

return “成功”;

}

当我们在修改老师这个方法体上加上 @Transactional注解后,当代码执行时

①、teacherMapper.updateTeacher(teacher);进行更新teacher时,系统不会马上对表中的数据进行更新;而是先存放在一个地方,等待整个方法内的代码执行成功后再进行提交;(如果出现错误,则不会被更新)

②、当代码走到:int i = 1 / 0;时,发现这个是一个错误代码,代码走到这边后,工程停住,无法向下走后,也无法执行到teacherMapper.deleteByName(“nini”)删除老师的代码;

③、当这个方法出现报错时,第一条的teacherMapper.updateTeacher(teacher)也被直接判定为false,这个方法中的内容都不会被执行到

只有当这个方法正常被执行后,才可能被执行

所以这就是@Transactional事务管理的作用

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月16日
下一篇 2022年6月16日

相关推荐

  • 医保基金不够致部分药品调出医保目录?国家医保局:当然不是

    中新社北京7月23日电 中国国家医疗保障局医药管理司负责人23日就地方增补医保药品“调出”有关问题回答记者提问。谈及有网友称“地方将部分药品调出医保目录是因为医保基金不够用了”,国…

    2022年8月1日
  • 八月去哪旅游,八月最适合去的地方推荐

    1、天柱山 被誉为“江淮第一山”的天柱山与黄山、九华山并称安徽省三大名山,七八月份去最为合适了。 奇峰、怪石、幽洞、峡谷等以雄、奇、灵、秀而著称于世,安徽天柱山还是是古皖文化展现地…

    2022年8月10日
  • iPhone6s之后,下一个钉子机会是哪一代iPhone?

    #话题大发明家#前6S用户,现11用户,分析下: 1.iPhone 7:不太可能 A10功耗翻车,性能相比a9提升不明显,续航也崩 2.iPhone 7 Plus:有戏,但钉的不多…

    2022年6月16日
  • 无论过去,不畏将来!未来由现在的你去谱写

    过去的失败都不能改变现在的你,未来的辉煌由现在的你去谱写。别老是沉浸在过去的错误之中,要把目光放在将来,不尝试一下,你怎么能断定自己不行? 风卷云舒,从不会因一个人的是非荣辱而停止…

    2022年7月18日
  • 2022合肥最新平均工资出炉9258元!你拖后腿了吗?

    首先说结论,这数据纯属扯淡,发布这数据的人不是蠢就是坏。 网上能查到的数据来源是智联招聘,是这么说的: 4月7日,智联招聘发布报告,数据显示,2022年第一季度全国38个核心城市平…

    2022年4月14日
  • 10个有秘密房间的著名地方,拉什莫尔山的林肯头像有一个秘密房间

    网上的人喜欢暴露密室。每隔一段时间,就会有一个新的故事像病毒一样传播开来,其中有人发现了一个隐藏的房间,里面有各种令人毛骨悚然的含义。但通常这些故事只是房主或公寓租客找到神秘地点的…

    2022年8月11日
  • 航海者一号开始向地球发送奇怪的数据

    目前距离地球约 230 亿公里的航海者 1 号太空探测器开始发送奇怪的数据。Gizmodo援引美国国家航空航天局 (NASA) 的数据报道了这一点。 根据美国宇航局位于南加州的喷气…

    2022年8月16日
  • 抵押经营贷,可以放款到自己的账户吗?

    经常会遇朋友非常疑惑贷下来的款为什么不能直接打到自己账上,而是要先打到一个第三方收款账号上去呢?今天跟大家聊聊抵押贷款中的受托支付。正在办理或者计划办理银行抵押的,大家可以先了解一…

    2022年8月25日
  • 酒店不宜住的三个房间(住酒店为什么尽量不住大床房)

    每次出去旅游的时候,总有些马虎的人会遇到各种问题。 出门,找一个好的地方住下来是首要考虑的问题。 为什么情侣酒店不能住? 如果你想要睡得比较好,找酒店的时候尽量不要靠近娱乐场所或者…

    2022年11月18日
  • A股:中国大数据产业2025年规模将突破3万亿元,6只大数据潜力股

    据贝克财经,7月8日,信通院云计算与大数据研究所副所长魏凯在中国信息通信研究院联合中国通信标准化协会主办的2022可信数据库峰会上表示,2022年,全球数据库市场规模约为700亿美…

    2022年7月9日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息