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)删除。
用户投稿
上一篇 2022年6月16日 21:24
下一篇 2022年6月16日 21:25

相关推荐

  • ios手游模拟器(手游模拟器ios)

    本文主要讲的是ios手游模拟器,以及和手游模拟器ios相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 哪个iOS模拟器能多开手游账号?可以推荐个好用的模拟器给我吗…

    2022年11月27日
  • 分享4条发微商朋友圈的方法(微商朋友圈应该怎么发)

    对于微商朋友来说,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底该怎么发呢? 为什么同样是经营一个朋友圈,有的微商看起来逼格满满,实际效果也不错;而有的却动都不动就被屏蔽甚至拉黑…

    2022年11月27日
  • 30个无加盟费的项目(茶颜悦色奶茶店加盟费多少)

    茶颜悦色又爆了,8月18日,茶颜悦色南京门店正式开业,开张不到半小时,门店就人满为患,消费者的购买热情十分高涨,而由于人流量过大造成拥堵,茶颜悦色也不得不暂停营业。 当然,这里面排…

    2022年11月27日
  • 短视频策划内容的3个要点(短视频策划内容怎么做)

    短视频在制作时,内容框架非常重要。如果直奔主题,然后结束,聚卓告诉你,这样的短视频已经过时了。现在的短视频需要框架的,但不是任何框架,它需要一种易于理解和消化的框架。而且,现在大多…

    2022年11月27日
  • 美团第三季度实现营收626亿元,即时配送订单量增至50亿笔

    新京报讯(记者秦胜南)11月25日,美团发布业绩公告显示,第三季度营收为626亿元,较去年同比增长28.2%,净利润为12.2亿元。第三季度,美团即时配送订单数增长至50亿笔。截至…

    2022年11月27日
  • 工商银行:已为客户开立个人养老金资金账户

    南方财经11月25日电,刚刚,21世纪经济报道记者收到工商银行短信,称“尊敬的客户,您已成功开立工商银行个人养老金资金账户,尾号为****,如有疑问,请及时联系我行客服热线9558…

    2022年11月26日
  • 净利润率越高越好吗(净利润率多少合适)

    一、持续增收不增利,平均净利润率首次跌入个位数 2021年,增收不增利依旧是行业主流。具体来看,大部分企业营业收入呈增长态势,E50企业平均同比增速达到17.3%,但是利润增速则明…

    2022年11月26日
  • 个人怎么做抖音带货(个人做抖音带货能赚钱吗)

    抖音如今是大家很熟悉的短视频平台,不过现在的抖音却不只是短视频那么简单,它的功能非常丰富,其中一个就是可以带货,相信很多小伙伴都有在抖音上买过东西,抖音如今的变现能力也是不容小觑的…

    2022年11月25日
  • 《宝可梦朱紫》学校上课有什么用?学校上课奖励介绍

    宝可梦朱紫游戏里在学校上课除了会学到宝可梦相关知识外,还可以获取不同的奖励,有些玩家不知道有什么奖励,下面随小编一起来看下宝可梦朱紫学校上课奖励介绍吧。 学校上课奖励介绍 游戏中上…

    2022年11月25日
  • 《宝可梦朱紫》梦特性怎么获得?隐藏特性获取方法推荐

    宝可梦朱紫里有很多宝可梦都是拥有梦特性会变强的宝可梦,很多玩家不知道梦特性怎么获得,下面就给大家带来宝可梦朱紫隐藏特性获取方法推荐,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 …

    2022年11月25日

联系我们

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