目录

Spring事务操作-事务引入

1.模拟异常

2.测试异常

3.没有使用spring框架的时候异常该如何处理

4.使用spring框架的时候异常该如何处理

5.在spring 进行声明式事务管理,底层使用AOP

6.spring 事务管理API

7.事务操作(注解声明式事务管理)

(1)在spring的配置文件中配置事务管理器

(2)在spring 配置文件中,开启事务注解

(3)在service 类上面(或者service类里面的方法上面) 添加事务注解

(4)@Transactional,这个注解添加到类上面,也可以添加到方法上面

(5)测试:


上一章的代码,如果正常执行,   不会出现问题

如果在代码执行过程中出现异常,会出现问题

因此,我们引入事务这个概念

Spring事务操作-事务引入

1.模拟异常

在业务逻辑层中的service层中模拟异常

package org.example.spring.service;import org.example.spring.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserDao userDao;//    转账方法调用public void accountMoney(){//lucy少100userDao.reduceMoney();//模拟异常int i=10/0;//mary多100userDao.addMoney();}}

2.测试异常

原来的数据库值:

后来的数据库值:

分析:lucy的钱少了,mary 的钱却没有增加

3.没有使用spring框架的时候异常该如何处理

package org.example.spring.service;import org.example.spring.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserDao userDao;//    转账方法调用public void accountMoney(){
//            1.开启事务try{
//            2.进行业务操作//lucy少100userDao.reduceMoney();//模拟异常int i=10/0;//mary多100userDao.addMoney();//            3.没有发生异常,提交事务}catch(Exception e){
//            4.如果发生了异常,从第3跳到第4,进行事务回滚}}}

4.使用spring框架的时候异常该如何处理

(1)事务添加到javaEE三层结构里面的service层 (业务逻辑层)

(2)在spring 进行事务管理操作有两种方式:

【第一种】编程式事务管理:相当于3. 里面的操作

【第二种】声明式事务管理(常用):

1.基于注解方式(常用)

2.基于xml 配置方式

5.在spring 进行声明式事务管理,底层使用AOP

6.spring 事务管理API

(1)spring 提供了一个接口,代表是事务管理器(事务操作都封装在里面)

这个接口针对不同的框架提供不同的实现类,例如以下的红框就是整合JDBC框架的子类 实现类

7.事务操作(注解声明式事务管理)

(1)在spring的配置文件中配置事务管理器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--    开启组件扫描--><context:component-scan base-package="org.example"></context:component-scan>
<!--数据库连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="url" value="jdbc:mysql://localhost:3306/user_db?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="sise"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/></bean><!--    创建jdbcTemplate对象--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--需要注入数据源信息--><property name="dataSource" ref="dataSource"></property></bean><!--    创建事务管理器-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean>
</beans>

(2)在spring 配置文件中,开启事务注解

引入名称空间tx

开启事务注解

(3)在service 类上面(或者service类里面的方法上面) 添加事务注解

(4)@Transactional,这个注解添加到类上面,也可以添加到方法上面

如果把这个注解添加类上面,这个类里面所有的方法都添加事务

如果把这个注解添加方法上面,仅仅为这个方法添加事务

package org.example.spring.service;import org.example.spring.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class UserService {@Autowiredprivate UserDao userDao;//    转账方法调用public void accountMoney(){
//1.开启事务
//        try{
//            2.进行业务操作//lucy少100userDao.reduceMoney();//模拟异常int i=10/0;//mary多100userDao.addMoney();//            3.没有发生异常,提交事务//        }catch(Exception e){
//            4.如果发生了异常,从第3跳到第4,进行事务回滚//        }}}

(5)测试:

原来数据:

后来数据(不变):

只是在控制台提示报错信息:

Spring事务操作-事务引入相关推荐

  1. Spring事务操作-事务

    目录 Spring事务操作-事务 1.什么是事务 (1)典型场景 2.事务的四个特性(俗称ACID特性) (1)原子性 (2)一致性 (3)隔离性 (4)持久性 3.搭建事务(搭建银行转账环境) 4. ...

  2. golang之gorm的事务操作 事务不成功原因

    一.回顾知识点 1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文 ...

  3. Spring5学习笔记------5、事务操作

    事务操作 事务是数据库操作的最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作则都失败 事务的四大特性: 原子性( A ): 事务是最小的工作单元,不可再分,事务中的操作要么都发生,要么都 ...

  4. spring中aop事务

    文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...

  5. Spring事务与事务传播机制

    目录 1.事务的基本概念 2.Spring事务的实现 3.事务隔离级别 4.事务传播机制 1.事务的基本概念 关于事务的一些基础概念我已经在MYSQL中讲解过了,有不了解的可以移步至此篇文章: MyS ...

  6. CC00073.kafka——|Hadoopkafka.V58|——|kafka.v58|稳定性|事务操作|

    一.事务操作 ### --- 事务操作~~~ # 在Kafka事务中,一个原子性操作,根据操作类型可以分为3种情况.情况如下: ~~~ 只有Producer生产消息,这种场景需要事务的介入: ~~~ ...

  7. JavaEE进阶 - Spring事务和事务传播机制 - 细节狂魔

    文章目录 1.为什么需要事务?(回顾) 2.Spring 中事务的实现 MySQL 中的事务使用(回顾) 1.⼿动操作事务(编程式事务) 2. 声明式事务(利用注解自动开启和提交事务) @Transa ...

  8. MySQL数据库设计概念(多表查询事务操作)

    每天进步一点点 数据库设计概念 数据库设计简介 表关系(多对多) 表关系(一对多) 表关系之一对一 多表查询 笛卡尔积现象 内连接查询 外连接查询 嵌套查询(子查询) 事务操作 事务的概念 手动提交事 ...

  9. 如何处理SQL Server事务复制中的大事务操作

    如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对 ...

最新文章

  1. addressof表达式不能转换为long_基本数据类型转换
  2. Atcoder AGC031C Differ By 1 Bit (构造、二进制)
  3. Java核心篇之Java锁--day2
  4. 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
  5. Synchronized的使用详解与区别(干货满满!!!)
  6. Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案
  7. 超链接a标签的伪类选择器问题,Link标签与visited标签的失效问题(问题介绍与解决方法)。以下全部内容跟可通过鼠标左键选取后,复制到编辑器中直接运行。
  8. [转载] pandas入门
  9. LinkButton(按钮)
  10. python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
  11. Python和Ruby两大语言全方位对比
  12. wordpress快速删除垃圾评论和关闭评论
  13. 2019 ICPC 南京 F题 Paper Grading
  14. java.io.IOException: Prepare failed.: status=0x1
  15. 长大后才发现,原来小时候课本里藏的全都是人生!
  16. 大力哥谈 DALI - 灯具内部 DALI 产品的新标识 - D4i
  17. 高并发解决方案之“Nginx限流”
  18. 孝经白话:天子章第二
  19. 一人之下服务器维护中,《一人之下》中你所不知道的梗全在这里
  20. Unity 2D精灵

热门文章

  1. Linux 应用程序 网络通讯函数记录
  2. C# Obsolete
  3. Spring常用注解的讲解
  4. 日常小问题汇总(1)
  5. 牛客15555 1 + 2 = 3?
  6. 【剑指offer】面试题26:树的子结构(Java)
  7. 与40mhz信道不兼容设置_物理信道发射功率
  8. Java多线程编程递增_java多线程编程之简介
  9. 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
  10. linux 检测mysql链接_MySQL笔记