Spring事务操作-事务引入
目录
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&useUnicode=true&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事务操作-事务引入相关推荐
- Spring事务操作-事务
目录 Spring事务操作-事务 1.什么是事务 (1)典型场景 2.事务的四个特性(俗称ACID特性) (1)原子性 (2)一致性 (3)隔离性 (4)持久性 3.搭建事务(搭建银行转账环境) 4. ...
- golang之gorm的事务操作 事务不成功原因
一.回顾知识点 1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文 ...
- Spring5学习笔记------5、事务操作
事务操作 事务是数据库操作的最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作则都失败 事务的四大特性: 原子性( A ): 事务是最小的工作单元,不可再分,事务中的操作要么都发生,要么都 ...
- spring中aop事务
文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...
- Spring事务与事务传播机制
目录 1.事务的基本概念 2.Spring事务的实现 3.事务隔离级别 4.事务传播机制 1.事务的基本概念 关于事务的一些基础概念我已经在MYSQL中讲解过了,有不了解的可以移步至此篇文章: MyS ...
- CC00073.kafka——|Hadoopkafka.V58|——|kafka.v58|稳定性|事务操作|
一.事务操作 ### --- 事务操作~~~ # 在Kafka事务中,一个原子性操作,根据操作类型可以分为3种情况.情况如下: ~~~ 只有Producer生产消息,这种场景需要事务的介入: ~~~ ...
- JavaEE进阶 - Spring事务和事务传播机制 - 细节狂魔
文章目录 1.为什么需要事务?(回顾) 2.Spring 中事务的实现 MySQL 中的事务使用(回顾) 1.⼿动操作事务(编程式事务) 2. 声明式事务(利用注解自动开启和提交事务) @Transa ...
- MySQL数据库设计概念(多表查询事务操作)
每天进步一点点 数据库设计概念 数据库设计简介 表关系(多对多) 表关系(一对多) 表关系之一对一 多表查询 笛卡尔积现象 内连接查询 外连接查询 嵌套查询(子查询) 事务操作 事务的概念 手动提交事 ...
- 如何处理SQL Server事务复制中的大事务操作
如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对 ...
最新文章
- addressof表达式不能转换为long_基本数据类型转换
- Atcoder AGC031C Differ By 1 Bit (构造、二进制)
- Java核心篇之Java锁--day2
- 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
- Synchronized的使用详解与区别(干货满满!!!)
- Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案
- 超链接a标签的伪类选择器问题,Link标签与visited标签的失效问题(问题介绍与解决方法)。以下全部内容跟可通过鼠标左键选取后,复制到编辑器中直接运行。
- [转载] pandas入门
- LinkButton(按钮)
- python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
- Python和Ruby两大语言全方位对比
- wordpress快速删除垃圾评论和关闭评论
- 2019 ICPC 南京 F题 Paper Grading
- java.io.IOException: Prepare failed.: status=0x1
- 长大后才发现,原来小时候课本里藏的全都是人生!
- 大力哥谈 DALI - 灯具内部 DALI 产品的新标识 - D4i
- 高并发解决方案之“Nginx限流”
- 孝经白话:天子章第二
- 一人之下服务器维护中,《一人之下》中你所不知道的梗全在这里
- Unity 2D精灵