Java项目中使用事务

事务的四大特性

事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

  • 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.
  • 一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,它们的账户总和还是1000。
  • 隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。
  • 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

事务隔离级别有哪些?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需求:注册一个用户,系统自动为他发一个帖子“新人报道”

在这里插入图片描述

声明式事务

在Java中,声明式事务是通过注解或XML配置的方式来实现的,主要用于管理方法或类的事务处理。Spring框架是Java中最常用的实现声明式事务的工具之一。以下是声明式事务在Java中的一般实现方式:

使用Spring框架:Spring框架提供了声明式事务管理的支持。通过在方法上添加@Transactional注解,可以将方法声明为一个事务性方法。Spring会在运行时基于这些注解来管理事务的开启、提交、回滚等操作。

import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Autowiredprivate MyRepository repository;@Transactionalpublic void myTransactionalMethod() {// 执行数据库操作repository.save(entity);//主动加错看事务是否回滚,因为事务保证原子性,有错误会把上面的操作也撤回Integer.valueOf("abc");    }
}

编程式事务

使用Spring的TransactionTemplate是在Java中实现编程式事务的一种便捷方式。它封装了事务管理的细节,简化了事务处理的代码,同时提供了更加灵活的事务控制。

  • transactionTemplate.setIsolationLevel:设置隔离级别

  • transactionTemplate.setPropagationBehavior:设置传播级别

  • 调用方法 execute匿名实现接口TransactionCallback,回调方法

public Object save2() {
//创建TransactionTemplate对象transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//使用TransactionTemplate执行事务return transactionTemplate.execute(new TransactionCallback<Object>() {@Overridepublic Object doInTransaction(TransactionStatus status) {// 新增用户User user = new User();user.setUsername("beta");user.setSalt(CommunityUtil.generateUUID().substring(0, 5));user.setPassword(CommunityUtil.md5("123" + user.getSalt()));user.setEmail("beta@qq.com");user.setHeaderUrl("http://image.nowcoder.com/head/999t.png");user.setCreateTime(new Date());userMapper.insertUser(user);// 新增帖子DiscussPost post = new DiscussPost();post.setUserId(user.getId());post.setTitle("你好");post.setContent("我是新人!");post.setCreateTime(new Date());discussPostMapper.insertDiscussPost(post);Integer.valueOf("abc");return "ok";}});
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 开发-实现Swiper高度可变化效果

介绍 在很多应用中&#xff0c;swiper组件每一个page的高度是不一致的&#xff0c;所以需要swiper组件下方页面的高度跟着一起变化。 效果图预览 使用说明 向左滑动swiper组件&#xff0c;上方swiper组件高度变高&#xff0c;下方页面随着swiper的变化而平滑的变化。 实现思…

第十三届蓝桥杯C/C++大学B组真题题解(一)

1、扫雷 #include <bits/stdc.h> using namespace std; int n,m; const int N110; int g[N][N]; int dx[8]{-1,-1,-1,0,1,1,1,0}; int dy[8]{-1,0,1,1,1,0,-1,-1}; int dfs(int x,int y){int ans0;for(int i0;i<8;i){int axdx[i],bydy[i];if(a<0||a>n-1||b<0…

【RHEL】redhat yum 报错: not registered to Red Hat Subscription Management.

【RHEL】redhat yum 报错: not registered to Red Hat Subscription Management. 问题描述解决方法参考博客&#xff1a; 问题描述 使用redhat7用yum install -y dos2unix命令时出现这个错误 This system is not registered to Red Hat Subscription Management. You can use …

乳腺癌诊断的集成自注意力Transformer编码器

ETECADx: Ensemble Self-Attention Transformer Encoder for Breast Cancer Diagnosis Using Full-Field Digital X-ray Breast Images 内科医生和放射科医生建议使用多种方法来发现乳腺癌&#xff0c;包括数字乳房x线摄影(DM)、超声(US)和磁共振成像(MRI)。 CAD系统与乳腺x线…

深度学习【向量化(array)】

为什么要向量化 在深度学习安全领域、深度学习练习中&#xff0c;你经常发现在训练大量数据时&#xff0c;深度学习算法表现才更加优越&#xff0c;所以你的代码运行的非常快至关重要&#xff0c;否则&#xff0c;你将要等待非常长的时间去得到结果。所以在深度学习领域向量化…

java中使用雪花算法(Snowflake)为分布式系统生成全局唯一ID

&#xff08;全局唯一ID的解决方案有很多种&#xff0c;这里主要是介绍和学习Snowflake算法&#xff09; 什么是雪花算法&#xff08;Snowflake&#xff09; 雪花算法&#xff08;Snowflake Algorithm&#xff09;是由Twitter公司在2010年左右提出的一种分布式ID生成算法&…

有没有寄快递省钱的方法啊,尤其是搬家寄大件?

从大学开始离家&#xff0c;到读研&#xff0c;工作&#xff0c;辗转换了四五个城市了&#xff0c;大大小小搬家十几次&#xff0c;最近才发现有一个宝藏寄快递方法。 个人寄件贵是为什么呢&#xff1f;据我做物流的朋友说一般我们寄快递因为单量少&#xff0c;所以单件价格都…

Windows下Docker安装Kafka3+集群

编写 docker-compose.yaml 主要参照&#xff1a;https://www.cnblogs.com/wangguishe/p/17563274.html version: "3"services:kafka1:image: bitnami/kafka:3.4.1container_name: kafka1environment:- KAFKA_HEAP_OPTS-Xmx1024m -Xms1024m- KAFKA_ENABLE_KRAFTyes- K…

【一】学习TDengine-总结新技术学习的思考

学习TDengine-总结新技术学习的思考 概要 因业务场景需要我们开始接触时序数据库&#xff0c;于是开始根据以往的学习经验着手熟悉这一项新技术&#xff0c;学习也是一种技能&#xff0c;成功的人越容易成功&#xff0c;因为他们掌握了一套成功的方法&#xff0c;这里提到学习经…

windows 线程同步的四种方式总结

一&#xff1a;内核态下的三种同步方式&#xff1a; 一、互斥变量&#xff08;Mutex&#xff09; 互斥对象包含一个使用数量&#xff0c;一个线程ID和一个计数器。其中线程ID用于标识系统中的哪个线程当前拥有互斥对象&#xff0c;计数器用于指明该线程拥有互斥对象的次数。 创…

Vue的学习之旅-part5

Vue的学习之旅-part5 虚拟DOM的原理用JS模拟DOM结构 vue的方法、计算属性、过滤器computed:{} 计算属性computed计算属性的完全体computed计算属性和methods方法的区别&#xff1a;过滤器&#xff1a;filters:{ 多个方法 } Vuex 状态管理模式 前几篇博客: Vue的学习之旅-part1 …

【算法】第二篇 大衍数列

导航 1. 简介2. 数列特征3. 代码演示 1. 简介 大衍数列&#xff0c;来源于《乾坤谱》中对易传“大衍之数五十”的推论。主要用于解释中国传统文化中的太极衍生原理。数列中的每一项&#xff0c;都代表太极衍生过程中&#xff0c;曾经经历过的两仪数量总和。是中华传统文化中隐…

A Study of Network Forensic Investgation in Docker Environments文章翻译

A Study of Network Forensic Investgation in Docker Environments Docker环境下的网络取证研究 摘要 网络罪犯利用越来越多的技术(如虚拟机或基于容器的基础设施)进行恶意活动。 这些虚拟环境的固有动态简化了恶意服务的快速创建,并隐藏了所涉及的系统,这是以前没有的技…

用AI作图,使用这个免费网站,快看我画的大鹏鸟和美女

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

中科院发布大模型想象增强法IAG,无需外部资源,想想就能变强

在人工智能领域&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;的子领域——问答系统&#xff08;QA&#xff09;中&#xff0c;知识的获取和利用一直是推动技术进步的核心问题。近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;在各种任务中展现出了惊人…

风电场智能化转型基于ARM工控机的HDMI数据实时监控显示

全球能源结构不断调整的大背景下&#xff0c;智能电网、太阳能发电、风能发电等清洁能源领域正经历着一场由技术创新引领的深刻变革。在这场变革中&#xff0c;ARM架构的工控机凭借其出色的性能、低功耗及高度可定制化的特点&#xff0c;正在成为能源管理系统的核心组件&#x…

轴向磁通电机应用场景不断扩展 未来市场存在较大开发空间

轴向磁通电机应用场景不断扩展 未来市场存在较大开发空间 根据磁通方向不同&#xff0c;磁通电机分为轴向磁通电机、径向磁通电机两大类&#xff0c;其中轴向磁通电机的磁通方向为轴向&#xff0c;载流导体系径向放置。轴向磁通电机特点在于结构上旋转转子位于定子的侧面&#…

【算法统治世界】动态规划 个人笔记总结

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

面试字节被挂了

分享一个面试字节的经历。 1、面试过程 一面&#xff1a;上来就直接"做个题吧"&#xff0c;做完之后&#xff0c;对着简历上一个项目聊&#xff0c;一直聊到最后&#xff0c;还算比较正常。 二面&#xff1a;做自我介绍&#xff0c;花几分钟聊了一个项目&#xff…

数据库入门-----SQL基础知识

目录 &#x1f4d6;前言&#xff1a; &#x1f4d1;SQL概述&&通用语法&#xff1a; &#x1f433;DDL&#xff1a; &#x1f43b;操作数据库&#xff1a; &#x1f41e;数据类型&#xff1a; &#x1f989;操作表&#xff1a; &#x1f9a6;DML: 语法规则&#x…