当前位置: 首页 > news >正文

【spring】事务

概述

1、什么事务
事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败

2、事务四个特性(ACID)
(1)原子性
(2)一致性
(3)隔离性
(4)持久性

搭建项目

1、创建数据库表,添加记录
2、创建 service,搭建 dao,完成对象创建和注入关系
(1)service 注入 dao,在 dao 注入 JdbcTemplate,在 JdbcTemplate 注入 DataSource
3、在 dao 创建两个方法:多钱和少钱的方法,在 service 创建方法(转账的方法)


@Service  
public class UserService {  //注入 dao   @Autowired  private UserDao userDao;  //转账的方法  public void accountMoney() {  //lucy 少 100      userDao.reduceMoney();  //mary 多 100      userDao.addMoney();  }  
}
@Repository  
public class UserDaoImpl implements UserDao {  @Autowired  private JdbcTemplate jdbcTemplate;  //lucy 转账 100 给 mary   //少钱  @Override  public void reduceMoney() {  String sql = "update t_account set money=money-? where username=?";  jdbcTemplate.update(sql,100,"lucy");  }  //多钱  @Override  public void addMoney() {  String sql = "update t_account set money=money+? where username=?";  jdbcTemplate.update(sql,100,"mary");  }  
}  

开启事务

概述

image.png

1、事务添加到 JavaEE 三层结构里面 Service 层(业务逻辑层)
2、在 Spring 进行事务管理操作
(1)有两种方式:

  • 编程式事务管理
    在代码中开启事务,提交等,太麻烦,基本不用
  • 声明式事务管理(常用)
    (1)基于注解方式(使用)
    (2)基于 xml 配置文件方式

4、在 Spring 进行声明式事务管理,底层使用 AOP 原理
5、Spring 事务管理 API
(1)提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
image.png

注解

配置

1、在 spring 配置文件配置事务管理器  <!--创建事务管理器-->  
<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <!--注入数据源-->  <property name="dataSource" ref="dataSource"></property>  
</bean>  2、在 spring 配置文件,开启事务注解  (1)在 spring 配置文件引入名称空间 tx  
<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"  xmlns:tx="http://www.springframework.org/schema/tx"  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   
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">  
(2)开启事务注解  
<!--开启事务注解-->  
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

或者
完全注解配置

@Configuration //配置类  
@ComponentScan(basePackages = "com.atguigu") //组件扫描  
@EnableTransactionManagement //开启事务  
public class TxConfig {  //创建数据库连接池  @Bean  public DruidDataSource getDruidDataSource() {  DruidDataSource dataSource = new DruidDataSource();  dataSource.setDriverClassName("com.mysql.jdbc.Driver");  dataSource.setUrl("jdbc:mysql:///user_db");  dataSource.setUsername("root");  dataSource.setPassword("root");  return dataSource;  }  //创建 JdbcTemplate 对象  @Bean  public JdbcTemplate getJdbcTemplate(DataSource dataSource) {  //到 ioc 容器中根据类型找到 dataSource      JdbcTemplate jdbcTemplate = new JdbcTemplate();  //注入 dataSource      jdbcTemplate.setDataSource(dataSource);  return jdbcTemplate;  }  //创建事务管理器  @Bean  public DataSourceTransactionManager  getDataSourceTransactionManager(DataSource dataSource) {  DataSourceTransactionManager transactionManager = new  DataSourceTransactionManager();  transactionManager.setDataSource(dataSource);  return transactionManager;  }  
}

3、在 service 类上面(或者 service 类里面方法上面)添加事务注解
(1)@Transactional,这个注解添加到类上面,也可以添加方法上面
(2)如果把这个注解添加类上面,这个类里面所有的方法都添加事务
(3)如果把这个注解添加方法上面,为这个方法添加事务

@Service
@Transactional 
public class UserService{}

参数

1、在 service 类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数
image.png

2、propagation:事务传播行为
(1)多事务方法直接进行调用,这个过程中事务 是如何进行管理的
image.png

3、ioslation:事务隔离级别
(1)事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题
(2)有三个读问题:

  • 脏读
    一个未提交事务读取到另一个未提交事务的数据
  • 不可重复读
    一个未提交事务读取到另一提交事务修改数据
  • 虚(幻)读
    一个未提交事务读取到另一提交事务添加数据

(3)解决:通过设置事务隔离级别,解决读问题

image.png

image.png

4、timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不提交进行回滚
(2)默认值是 -1 ,设置时间以秒单位进行计算

5、readOnly:是否只读
(1)读:查询操作,写:添加修改删除操作
(2)readOnly 默认值 false,表示可以查询,可以添加修改删除操作
(3)设置 readOnly 值是 true,设置成 true 之后,只能查询

6、rollbackFor:回滚
(1)设置出现哪些异常进行事务回滚

7、noRollbackFor:不回滚
(1)设置出现哪些异常不进行事务回滚

xml配置

第一步 配置事务管理器
第二步 配置通知
第三步 配置切入点和切面

<!--1 创建事务管理器-->  
<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <!--注入数据源-->  <property name="dataSource" ref="dataSource"></property>  
</bean>  <!--2 配置通知-->  
<tx:advice id="txadvice">  
<!--配置事务参数-->  
<tx:attributes>  <!--指定哪种规则的方法上面添加事务-->  <tx:method name="accountMoney" propagation="REQUIRED"/>  <!--<tx:method name="account*"/>-->  
</tx:attributes>  
</tx:advice>  <!--3 配置切入点和切面-->  
<aop:config>  
<!--配置切入点-->  
<aop:pointcut id="pt" expression="execution(* com.atguigu.spring5.service.UserService.*(..))"/>  
<!--配置切面-->  
<aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>  
</aop:config>

相关文章:

【spring】事务

概述 1、什么事务 事务是数据库操作最基本单元&#xff0c;逻辑上一组操作&#xff0c;要么都成功&#xff0c;如果有一个失败所有操 作都失败 2、事务四个特性&#xff08;ACID&#xff09; &#xff08;1&#xff09;原子性 &#xff08;2&#xff09;一致性 &#xff08;3…...

博通仍然是美股市场最好的芯片半导体股

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 博通(AVGO)是一家快速增长的半导体公司&#xff0c;并且有很高的股息分红&#xff0c;目前其股息收益率已经高出了平均水平3.2%&#xff0c;而且估值非常合理&#xff0c;仅为预期净利润的14倍。 虽然博通也受到了经济衰退影…...

java开发手册之异常日志

文章目录异常日志异常处理日志规约异常日志 异常处理 1.Java 类库中定义的一类 RuntimeException可以通过预先检查进行规避&#xff0c;而不应该通过 catch 来处理 比如&#xff1a;IndexOutOfBoundsException&#xff0c;NullPointerException 等等。 说明&#xff1a;无法通…...

P6专题:关于P6 EPPM和PPM的区别及选型

目录 引言 什么是 Primavera P6 项目管理&#xff1f; Primavera P6 PPM 关键点 Primavera P6 PPM 是独立工具还是企业工具&#xff1f; 什么是 Primavera P6 企业项目组合管理&#xff1f; 那么EPPM的windows-tool呢&#xff1f; P6 EPPM 适合谁&#xff1f; 更多对比…...

亿万级海量数据去重软方法

文章目录原理案例一需求&#xff1a;方法案例二需求&#xff1a;方法&#xff1a;参考原理 在大数据分布式计算框架生态下&#xff0c;提升计算效率的方法是尽可能的把计算分布式话、并行化&#xff0c;避免单节点计算过载&#xff0c;把计算分摊到各个节点。这样解释小白能够…...

记录--手摸手带你撸一个拖拽效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 最近看见一个拖拽效果的视频(抖音&#xff1a;艾恩小灰灰)&#xff0c;看好多人评论说跟着敲也没效果&#xff0c;还有就是作者也不回复大家提出的一些疑问&#xff0c;本着知其然必要知其所以然…...

python高德地图+58租房网站平台源码

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python地图 免费获取完整源码源文件说明文档配置教程等 在PyCharm中运行《高德地图58租房》即可进入如图1所示的高德地图网页。 具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;打开地图网页后&#xff0c;在编…...

ubuntu 将jupyter-lab保存为桌面快捷方式和favourites

ubuntu: 将jupyter-lab保存为桌面快捷方式和favourites desktop shortcut 建立一个新的desktop文件 cd ~/Desktop touch Jupyter-lab.desktop将文件修改成如下&#xff1a; [Desktop Entry] Version1.0 NameJupyterlab CommentBack up your data with one click Exec/home/cjb/…...

Java 类和对象简介

类是对象的抽象&#xff0c;是一组具有相同特性&#xff08;属性&#xff0c;事物的状态信息&#xff09;和行为&#xff08;事物能做什么&#xff09;的事物的集合&#xff0c;可以看做一类事物的模板。 对象是类的实例化&#xff0c;是具体的事物。 比如&#xff1a;人类和…...

时间复杂度的计算

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 文章目录123456789时间复杂度&#xff08;就是一个函数&#xff09;的计算&#xff0c;…...

站内信箱系统的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;在经济全球化和信息技术成为发展迅速的今时今日&#xff0c;人们通过电子邮件收发进行信息传递已经成为主流。随着互联网和网络办公的发展&#xff0c;电子邮件正在被广泛应用在人们的日常生活中。跟据调查研究统计&#xff0c;在全…...

systemV共享内存

systemV共享内存 共享内存区是最快的IPC形式。共享内存的大小一般是4KB的整数倍&#xff0c;因为系统分配共享内存是以4KB为单位的&#xff08;Page&#xff09;&#xff01;4KB也是划分内存块的基本单位。 之前学的管道&#xff0c;是通过文件系统来实现让不同的进程看到同一…...

Python基础之if逻辑判断

在学习if语句之前&#xff0c;我们先学习一种数据类型&#xff0c;布尔类型&#xff08;bool&#xff09;&#xff0c;在if语句中&#xff0c;我们需要通过判断条件是否为真或者假&#xff0c;才进入下面的语句块执行。 一、布尔类型&#xff08;bool&#xff09; 布尔类型&a…...

实现pdf文件预览

前言 工作上接到的一个任务&#xff0c;实现pdf的在线预览&#xff0c;其实uniapp中已经有对应的api&#xff1a;uni.openDocument(OBJECT)&#xff08;新开页面打开文档&#xff0c;支持格式&#xff1a;doc, xls, ppt, pdf, docx, xlsx, pptx。&#xff09;**实现了相关功能…...

【java】alibaba Fastjson --全解史上最快的JSON解析库

文章目录前序Fastjson 简介Fastjson 的优点速度快使用广泛测试完备使用简单功能完备下载和使用将 Java 对象转换为 JSON 格式JSONField创建 JSON 对象JSON 字符串转换为 Java 对象使用 ContextValueFilter 配置 JSON 转换使用 NameFilter 和 SerializeConfigFastjson 处理日期F…...

绝对零基础的C语言科班作业(期末模拟考试)(十道编程题)

编程题&#xff08;共10题&#xff1b; 共100.0分&#xff09;&#xff08;给猛男妙妙屋更一篇模拟考试&#xff09;模拟1&#xff08;输出m到n的素数&#xff09;从键盘输入两个整数[m,n], 输出m和n之间的所有素数。 输入样例&#xff1a;3&#xff0c;20输出样例&#xff1a;…...

按位与为零的三元组[掩码+异或的作用]

掩码异或的作用前言一、按位与为零的三元组二、统计分组1、map统计分组2、异或掩码总结参考资料前言 当a b 0时&#xff0c;我们能够很清楚的知道b是个什么值&#xff0c;b 0 - a -a&#xff0c;如果当a & b 0时&#xff0c;我们能够很清楚的知道b是什么值吗&#xf…...

C++基础篇(一)-- 简单入门

C 语言是在优化 C 语言的基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言。在后来的持续研究中&#xff0c;C 增加了许多新概念&#xff0c;例如虚函数、重载、继承、标准模板库、异常处理、命名空间等。 C 语言的特点主要表现在两个方面&#xff1a;全面兼…...

前端整理 —— javascript 2

1. generator&#xff08;生成器&#xff09; 详细介绍 generator 介绍 generator 是 ES6 提供的一种异步编程解决方案&#xff0c;在语法上&#xff0c;可以把它理解为一个状态机&#xff0c;内部封装了多种状态。执行generator&#xff0c;会生成返回一个遍历器对象。返回的…...

Spring-注解注入

一、回顾XML注解 bean 配置 创建 bean public class Student { } 配置 xml bean <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSche…...

华为校招机试 - 攻城战(Java JS Python)

目录 题目描述 输入描述 输出描述 用例 题目解析 JavaScript算法源码 Java算法源码...

Docker入门

Docker一、何为DockerDocker是一个开源的应用容器引擎&#xff0c;基于GO语言并遵循从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后在发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使…...

时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)

时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序) 目录 时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)预测结果模型输出基本介绍完整程序参考资料预测结果 模型输出 layers = 具有以下层的 151 Layer 数组:...

【蒸滴C】C语言结构体入门?看这一篇就够了

目录 一、结构体的定义 二、结构的声明 例子 三、 结构成员的类型 结构体变量的定义和初始化 1.声明类型的同时定义变量p1 2.直接定义结构体变量p2 3.初始化&#xff1a;定义变量的同时赋初值。 4.结构体变量的定义放在结构体的声明之后 5.结构体嵌套初始化 6.结构体…...

第十三届蓝桥杯

这里写目录标题一、刷题统计&#xff08;ceil函数返回的是等值于某最小整数的浮点值&#xff0c;不强制转换回int就wa&#xff0c;没错就连和int整数相加都wa二、修剪灌木&#xff08;主要应看清楚会调转方向三、统计子矩阵&#xff08;前缀和滑动窗口⭐&#xff09;四、[积木画…...

消息队列mq

应用场景&#xff1a; 1、解耦 2、削峰填谷 3、异步处理 4、消息通讯 工作模式&#xff1a; 一个消息只能被消费一次&#xff08;订阅模式除外&#xff09;&#xff0c;消费者接受到消息会回调业务逻辑&#xff0c;消费逻辑写在回调函数里面。 1、简单模式&#xff1a;一个生产…...

[学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

文章目录视频资料&#xff1a;一、Spark基础入门&#xff08;环境搭建、入门概念&#xff09;第二章&#xff1a;Spark环境搭建-Local2.1 课程服务器环境2.2 Local模式基本原理2.3 安装包下载2.4 Spark Local模式部署第三章&#xff1a;Spark环境搭建-StandAlone3.1 StandAlone…...

git push和 git pull的使用

git push与git pull是一对推送/拉取分支的git命令。git push 使用本地的对应分支来更新对应的远程分支。$ git push <远程主机名> <本地分支名>:<远程分支名>*注意: 命令中的本地分支是指将要被推送到远端的分支&#xff0c;而远程分支是指推送的目标分支&am…...

首发,pm3包,一个用于多组(3组)倾向评分匹配的R包

目前&#xff0c;本人写的第二个R包pm3包已经正式在CRAN上线&#xff0c;用于3组倾向评分匹配&#xff0c;只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配&#xff1f;倾向评分匹配&#xff08;Propensity Score Match…...

基于Canal的数据同步

基于Canal的数据同步 一、 系统结构 该数据同步系统由Spring Boot和Canal共同组成。 Spring Boot 是一个流行的 Java Web 框架&#xff0c;而 Canal 则是阿里巴巴开源的 MySQL 数据库的数据变更监听框架。结合 Spring Boot 和 Canal&#xff0c;可以实现 MySQL 数据库的实时数…...

班级网站建设规划书/免费行情软件网站大全

转自 https://blog.csdn.net/zjulixn/article/details/48163697 今天下班的时候&#xff0c;小伙伴突然问我什么是实时示波器&#xff0c;什么是采样示波器&#xff0c;有什么区别&#xff0c;各自都有什么优势。我想大家虽然都经常用示波器&#xff0c;可能也不会太关注我们使…...

主播网站怎么建设/网络营销服务外包

http://codeforces.com/problemset/problem/986/A n个点的无向连通图&#xff0c;每个点有一个属性&#xff0c;求每个点到s个不同属性点的最短距离 依稀记得那天晚上我和Menteur-Hxy探讨这道题如何不可做的样子 直观想法当然是每个点出发bfs&#xff0c;找到s个就停止&#xf…...

企业信息管理系统案例/seo外包服务方案

【www.ahanw.cn--心得体会】随着信息技术的不断发展&#xff0c;多媒体教学成为活跃课堂、调动学生学习积极性的一种主要手段。下面是小编整理的相关内容&#xff0c;希望对你有帮助。信息化教学心得体会一在学校信息化建设和应用发展这样一个新背景下&#xff0c;作为学校领导…...

建设施工合同备案在哪个网站/游戏推广话术技巧

我在用网页.py从Oracle创建一个简单的报告页。当我使用vars传递参数的最佳实践方法时&#xff0c;延迟是11-12秒。当我使用字符串替换执行相同的查询时&#xff0c;查询将在不到一秒钟的时间内运行。我是这样检查的&#xff1a;sql """SELECT a, b, cFROM my_t…...

wordpress 建立数据库连接时出错/第三方平台推广引流

简述: 好久没有发布原创文章&#xff0c;一如既往&#xff0c;今天开始Kotlin浅谈系列的第十讲&#xff0c;一起来探索Kotlin中的序列。序列(Sequences)实际上是对应Java8中的Stream的翻版。从之前博客可以了解到Kotlin定义了很多操作集合的API&#xff0c;没错这些函数照样适用…...

做胃镜需那好天津津门网站A/国际新闻今天最新消息

上图是每个栈帧的内部结构&#xff0c;一个栈能放多少栈帧&#xff0c;取决于栈帧的大小&#xff0c;栈帧的大小取决于局部变量表 这篇主要讲解 局部变量表&#xff1a; 一&#xff0c;概念&#xff1a; &#xff08;1&#xff09;局部变量表也被称之为局部变量表数组或本地…...