1 创建一个实体类,该类拥有的属性与数据库拥有的字段一一对应

import lombok.Data;
@Data
public class InterfaceTest {
private Integer interfaceId;
private String interfaceName;
private String interfaceType;
private String interfaceMethod;
private String interfaceAliasName;

}

2 数据库表拥有的字段
创建一个接口:写增删改查方法的接口,写入新增方法

import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MyInterfaceTestMapper {
void addInterfaceTest(InterfaceTest interfaceTest);
}

创建一个xml文件:写增删改查sql的文件,写入新增sql

<mapper namespace="com.longteng.lesson2.my.mybatis.MyInterfaceTestMapper"><!--id就是接口中的方法名--><insert id="addInterfaceTest"useGeneratedKeys="true"keyColumn="interface_test_id"keyProperty="interfaceId"parameterType="com.longteng.lesson2.my.mybatis.InterfaceTest"><!--给哪个表插入数据,就写哪个表-->insert into interface_test<!--给哪些字段插入数据,就写哪些字段名-->(interface_name,interface_method,interface_type,interface_alias_name)<!--要插入的数据是对应的哪些字段,就是实体类里的字段,要与字段名的先后顺序一一对应,用#{}接收-->values (#{interfaceName},#{interfaceMethod},#{interfaceType},#{interfaceAliasName})</insert>

事物:通过@Transactional进行事物回滚

多个操作放在一起执行叫事物
例如一个下订单的业务
最先执行的是插入数据库,但是插入数据库成功后,后续业务并没有成功,下订单业务还没有完全操作完毕,这个时候其实下订单已经失败了,那么插入数据的那条数据就是脏数据了,要做的就是对于事物没有成功的数据做回滚操作
事物分为编程事物管理、声明事物管理,例子中实现的是声明事物
编程事物:自己控制回滚流程,多用于复杂系统
声明事物:@Transactional注解控制回滚流程,多用于简单流程

import com.longteng.lesson2.my.mybatis.InterfaceTest;
import com.longteng.lesson2.my.mybatis.MyInterfaceTestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class InterfaceService {
//注入接口
@Autowired
MyInterfaceTestMapper myInterfaceTestMapper;
//出现异常回滚,一般不指定的情况下出现rollback、error的异常才会回滚,出现Exception异常是不会回滚的,这里就是指定一下出现Exception也要做回滚
@Transactional(rollbackFor = Exception.class)
//返回Object类型的带参方法,抛出一个异常
public Object test(Integer i) throws Exception{//创建实体类的实例,通过实例向数据库中添加数据InterfaceTest interfaceTest=new InterfaceTest();interfaceTest.setInterfaceName("qwer");interfaceTest.setInterfaceMethod("GET");interfaceTest.setInterfaceType("HTTP");interfaceTest.setInterfaceAliasName("QWER");//接口类实例调用接口的新增方法,添加数据到数据库int i=myInterfaceTestMapper.addInterfaceTest(interfaceTest);//如果方法传参i不等于1就抛出异常,若等于1就正常返回,添加成功if(i!=1){throw new Exception();}else {return "添加成功";}
}
}

controller中

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class MyInterfaceController {
//注入回滚的业务类
@Autowired
InterfaceService interfaceService;
@RequestMapping("/interfaceService")
public @ResponseBody Object test(Integer i)throws Exception{return interfaceService.test(i);
}
}

浏览器请求 http://127.0.0.1:8080/interfaceService?i=1 i=1 添加数据到数据库成功


浏览器请求 http://127.0.0.1:8080/interfaceService?i=2 i=2 添加数据到数据库失败

如果不用@Transactional,就算请求时i不等于1插入数据库也能成功
例子中,调用addInterfaceTest方法其实就是插入数据库操作,并且debug的话,sql的确是打印了,但是这个时候并没有插入数据库,因为用了回滚的注解,整个事物是一次提交,不是代码读到哪里就执行哪里,是等test方法整个执行完毕,才确定该sql要不要插入数据库

1 一般情况下一个方法(service层关于操作数据库的方法)就是一个事物
2 Spring事物的底层实现是靠AOP实现的
3 事物也是可以加在抽象类或者接口类上的,继承抽象类、实现接口类的那些子类也就继承到了事物这个类

@Transactional注解回滚(事物)相关推荐

  1. Spring中@Transactional事务回滚(含实例详细讲解,附源码)

    一.使用场景举例 在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用.下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除 ...

  2. java SSM多操作注解回滚

    在业务操作时难免会遇到一个业务多操作,会用到事物回滚这里写了一个简单的多操作失败事物回滚案例 在这之前你需要在你的applicationContext-mybatis.xml中配置: <!-- ...

  3. @Transactional事务回滚使用

    使用:作用于类时,对该类下所有public方法都有效,也可写在某个方法上,当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息 回滚方式: ...

  4. Java的@Transactional事务回滚

    @Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@ ...

  5. 查看回滚事物sql_卧槽:这款 SQL自动检查神器,吊炸天的功能,真TMD多!!

    介绍 Yearning MySQL 是一个SQL语句审核平台.提供查询审计,SQL审核等多种功能,支持MySQL ,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易! 开源 ...

  6. Spring的Transactional注解

    Spring的Transactional注解主要有以下功能: 1. 标注在方法上,如果该方法掉了多个别的方法,每个方法都有对数据库做数据更改,如果这些更改需要保持一致性,这时就可以用到这个注解. 2. ...

  7. JAVA事务回滚的使用方法

    假设这是一个service类的片段 try{      //出现异常 } catch (Exception e) {             e.printStackTrace();         ...

  8. spring事务管理中,用try-catch处理了异常,事务也会回滚?

    在平时的开发中,如果在事物方法中用 try-catch处理了异常,那么spring aop不能捕获到异常信息,从而会导致spring不能对事务方法正确的进行管理,不能及时回滚错误信息. 下面用代码演示 ...

  9. 学习@Transaction异常自动回滚以及手动回滚和回滚部分SQL服务

    学习@Transaction异常回滚 一.第一种注解回滚 二.第二种手动回滚 三.第三种部分回滚 一.第一种注解回滚 @Service public class TransactionServiceI ...

最新文章

  1. vagrant up报错 Warning: Authentication failure. Retrying...解决方案
  2. Go 语言编程 — net/http — HTTP 服务端
  3. 企业网络推广——企业网络推广专员讲述网站友链交换如何做
  4. HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
  5. 企业日志分析之linux系统message收集展示
  6. pythonargmaxaxis1_详解numpy的argmax的具体使用
  7. Zookeeper分布式锁的使用
  8. 企业实战_03_Redis基础命令
  9. python字符串命名_python-字符串及其常用方法
  10. spark写入oracle 优化,spark读写数据库大表分区性能优化
  11. Linux初级阶段学习笔记-本地源YUM配置
  12. 给ecshop后台增加管理功能页面
  13. Linux基础-1.Linux命令及获取帮助
  14. 23种设计模式(6):模版方法模式
  15. 软件系统的测试计划,软件系统测试计划-模板
  16. 李宏毅2020机器学习深度学习(完整版)国语课程PPT
  17. Word 远程调用失败:异常来自 HRESULT:0x800706BE
  18. 【C++ 程序】 TVJ Complex Calculator (v 2.1) 复数计算器
  19. 谷仓的安保【DFS】
  20. 教你识别思科交换机型号

热门文章

  1. oracle 按每分钟分组,oracle按每个10分钟进行分组展示数据
  2. Intel 酷睿 i3、i5、i7 CPU 处理器之间有什么区别
  3. 多种JS刷新页面代码!
  4. c语言实现alsa播放
  5. 【linux】posix是什么都不知道,还好意思说你懂Linux?
  6. 【0基础强力推荐】R语言快速入门
  7. pythonidle怎样显示行号_给Python IDLE添加行号显示
  8. java输入两个整数_求平均值._用C语言编写:完成从键盘输入两个整数a和b,求平均值ave,并输出平均值...
  9. 廖雪峰Python基础笔记
  10. 2022-04-26:给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。 从点 (x