spring 中的事务小结

spring中可以使用声明式事务和编程式事务,主要用的比较多的是声明式事务,下面举例子小结一下
首先在config.xml中定义好datasource和platformtranscationmanager
<!-- 定义DataSource -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

..........
</bean>

<!-- 定义TransactionManager -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 定义BookDao -->

<bean id="bookDaoTarget" class="example.chapter6.BookDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 封装为事务的BookDao -->

<bean id="bookDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="bookDaoTarget" />
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<!-- 对以query开头的方法要求只读事务 -->
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<!-- 对于其他方法要求事务 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>

则使用的代码例子为
ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
BookDao bookDao = (BookDao)context.getBean("bookDao");
.....//之后的就是
try
{

}catch {}结构,程序中不需要再有处理事务方面的代码了。

另外,在JAVA 5中,可以用注释来更简单的配置,但要注意的是,必须使用spring 2.0才行
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
>
。。。。。。其他的和上面的相同,最后加上
<!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

然后,对接口使用注释
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

@Transactional(readOnly=true)
Book query(String id);

@Transactional(readOnly=true)
List<Book> queryAll();

void insert(Book book);

void update(Book book);

void delete(Book book);

}
要注意的是,@transcational的注释只能应用到public方法上

2 集成hiberante事务
比如用hibernatedaosupport支持DAO,使用spring 2.0的注解,比如

bookdao.java
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

@Transactional(readOnly=true)
Book query(String id);

@Transactional(readOnly=true)
List<Book> queryAll();

void insert(Book book);

void update(Book book);

void delete(Book book);

}

实体配置代码如下

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name="Book")
public class Book {

private String id;
private String name;
private String author;

@Id
public String getId() { return id; }
public void setId(String id) { this.id = id; }

public String getName() { return name; }
public void setName(String name) { this.name = name; }

public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }

}
然后其配置代码如下
<!-- 定义SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="annotatedClasses">
<list>
<value>example.chapter6.Book</value>
</list>
</property>
<property name="annotatedPackages">
<list>
<value>example.chapter6</value>
</list>
</property>
</bean>

<!-- 定义TransactionManager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 定义BookDao -->
<bean id="bookDao" class="example.chapter6.BookDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
mabl:AI原生测试自动化平台的基础使用 mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。 阅读详情

相关推荐

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

Spring事务小结

事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性; Spring 实现事务管理的两种方式: 编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务管理中,必须在每个事务操作中包含额外的事务管理代码; 声明式事务管理(推荐):大多数情况下比编程式事务管理更好用,它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理,Spring ...

qq_44971038的博客 179

用VASPKIT+Quantum Espresso高效绘制能带图:从K点路径生成到可视化全流程

本文详细介绍了如何整合VASPKIT与Quantum Espresso(QE)软件,构建一套高效的能带计算与可视化工作流。通过VASPKIT自动化生成高对称K点路径,结合QE完成自洽与非自洽计算,并利用gnuplot绘制发表级能带图。该流程极大提升了材料电子结构研究的效率与可重复性,是进行DFT能带计算的实用指南。

weixin_29294975的博客 163

Spring事务整理小结

Spring不是直接管理事务的,而是提供了多种事务管理器,通过这些事务管理器,Spring将事务委托给了Hibernate、MyBaits、JTA等持久性框架的事务来实现。spring 事务底层使用了 aop,也就是通过 jdk 动态代理或者 cglib,帮我们生成了代理类,在代理类中实现的事务功能。适用内部事务和外部事务不存在业务关联情况,如日志,外部不存在事务就开启新事务,存在就自己创建一个新的事务。但如果某个方法用 final 修饰了,那么在它的代理类中,就无法重写该方法,而添加事务功能。

2301_80043959的博客 760

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 706

数据助力行业发展:BJTU-RAO转向架数据集介绍

BJTU-RAO转向架数据集是完全公开的,何研究人员皆可以通过后文的下载链接免费下载数据,且在标注数据来源的前提下,研究人员可以自由使用BJTU-RAO转向架数据集。因此,聚焦各类列车转向架传动系统在途安全保障新技术研究和新算法开发,实现牵引电机、驱动齿轮箱和轴箱等关键部件的实时状态监测与智能故障诊断,对保障列车安全可靠运行具有重要的现实意义。BJTU-RAO转向架数据集包含51种健康状态的样本,涵盖正常状态、部件级单一故障、部件级复合故障以及系统级关联复合故障,数据量达116GB。

2401_88870554的博客 3500

Spring 事务 小结

Spring事务的PointcutAdvisor: org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor 具体的Advice为:org.springframework.transaction.interceptor.TransactionInterceptor 1

u011385186的专栏 239

基于YOLOv8的植物生长阶段识别系统设计与实现

本文详细介绍了一个基于YOLOv8深度学习模型的植物生长阶段识别系统,包含完整的数据集构建、模型训练、评估以及基于PyQt5的用户界面开发过程。系统能够自动识别植物在不同生长阶段(如发芽期、生长期、开花期、结果期等)的形态特征,为精准农业和智能种植提供技术支持。文章提供了完整的代码实现,并讨论了模型优化策略和实际应用场景。关键词:植物生长阶段识别、YOLOv8、目标检测、PyQt5、深度学习。

YOLO 465

Spring事务+JDBC小结

数据库事务 原子性: 多个操作组成最小不可分割单元。一致性: 操作成功后,数据库的状态和业务规则是一致的。隔离性: 并发数据处理时,相互不干扰。持久性: 一旦事物提交成功后,数据的操作被记入库中。 数据库并发问题 脏读:读取不可靠的数据(数据被回滚了),Oracle不会发生脏读情况。不可重复读:同一事务中两次读取数据有差异(数据被别的事务修改、删除)。幻象读:A事务读到B事务提交的新数据,导...

weixin_42679286的博客 282

基于ROS2 Humble和VGR数据集完整部署GADEN气体分散仿真环境及模型替换实践

文章摘要 本文详细介绍了基于ROS2 Humble和VGR数据集部署GADEN气体分散仿真环境的方法。GADEN是一款专为移动机器人嗅觉研究设计的3D仿真框架,能够精确模拟气体扩散过程并集成多种环境传感器。文章从系统配置开始,逐步指导读者完成ROS2 Humble环境的搭建、GADEN框架的编译部署,以及VGR数据集的使用。VGR数据集包含120个基于真实房屋模型的CFD仿真案例,为研究提供高度真实的测试环境。教程涵盖了常见问题的解决方案,并深入探讨了气体扩散模型参数的修改方法,为机器人嗅觉算法的开发和验证

huanghm88的专栏 276

vue3+element-plus - 最新详细实现将表格Table组件 “所见所得导出“ 为excel(xls/xlsx)电子表格文件,表格中的图片图像、图标等媒体资源完美导出显示(详细示例代码)

vue3,nuxt3,element plus,表格组件,Table,el-table,导出,下载,excel,电子工作簿,xls,xlsx,将表格导出成xls,如何把表格原封不动的导出成excel,保留图片,带图片,图标,如何导出包括含有图片的Excel表格,图片和表格数据导出excel,把表格导出成excel格式,表格内的图片一起导出,vue3导出图片和数据到Excel,可导出图片,导出图像到Excel,网页上的图片怎么能导出到xls表格中,显示图片url链接,图片太多导出失败,图片会超出单元格,图片不

✅ 精选推荐文章 4766

Spring 事务传播机制,失效场景等小结

Spring事务小结Spring事务传播机制Spring事务失效场景Spring 事务四大特性事务隔离级别产生的问题Spring 手动开启事务 Spring事务传播机制 Spring 七种传播机制 REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) 支持当前事务,如果有事务加入当前事务,没有则会创建一个新的事务 SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) 支持当前事务,如

cx897459376的博客 1060

基于PyQt5和OpenCV的传统图像分割应用UI程序

主要功能包括:加载和显示图像应用多种图像分割算法调整算法参数保存处理结果。

Henry的博客 472

spring中事务的小结

spring中可以使用声明式事务和编程式事务,主要用的比较多的是声明式事务,下面举例子小结一下   首先在config.xml中定义好datasource和platformtranscationmanager      ..........                                                                          

jackyrongvip的专栏 663

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring事务管理小结

Spring中嵌套事务的方式可以在org.springframework.transaction.TransactionDefinition中找到。 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_M...

peigen的专栏 203

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring 事务小结

@Override@Transactionalpublic void add() { this.in();}public void in(){ NyOrder nyOrder=new NyOrder(); nyOrder.setOrderStatus((byte)1); nyOrder.setOrderNum("hello"); nyOrder.setOut...

weixin_30576827的博客 118

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

记一次Spring事务异常回滚小结

一、场景    由于最近所做的工作全部是接口对于数据库CURD操作,其中很多场景需要保证操作一致性。例如删除一个班级实体,需要先删除班级下的用户,再将用户班级关系存入历史,将班级信息存入历史,再将班级删除。需要保证数据的一致性,数据提交操作回滚至异常发生前的状态。二、事务管理的目的   再出现异常的情况下,保证数据的一致性;数据提交操作回滚至异常发生前的状态。三、事物管理的方式A、编程式事物管理:...

climbing_suc的博客 1175

Spring AOP及事务控制小结

这里写自定义目录标题AOP和OOP区别:JAVA动态代理基本语法 AOP和OOP区别: AOP和OOP定义: AOP:(Aspect Oriented Programming)面向切面编程 OOP:(Object Oriented Programming )面向对象编程 面向切面编程:基于OOP基础之上新的编程思想,指在程序运行期间,将某段代码动态的切入到指定方法的指定位置进行运行的编程方式 JA...

jeannia的博客 996

Spring--事务小结

Spring为我们提供了非常方便的事务管理,在不需要了解不同持久层事务处理的情况下,使用配置或注解的方式实现了事务的统一管理。这也就体现了之前所说的Spring核心AOP功能的作用。而为了更好的使用Spring事务管理,需要了解以下知识: 一、数据库事务相关基础知识 1、  何为事务 最简单的话就是,事务内的多个SQL语句,在事务提交时,要么都成功,要么都失败。必定是一个整体。事务的四个特性

paditang的博客 433

spring aop与事务小结

项目需要,搭建过程使用了spring+mybatis+mysql,一台服务器需要同时连接两个数据库AB。其中,AB两库分区域部署,各为该区域的主库,领导反馈mysql异步复制不可靠,因此需要在程序里自行实现双写。踩过的坑:使用spring注解事务,对service层的方法进行注解,@afterreturning后用数据源选择器,切换数据源调用joinpoint的proceed方法,当insert语...

bin244086124的博客 732

Spring事务的七种传播行为小结

最常用的属性是1和4。 1.PROPAGATION_REQUIRED 如果事务存在,则支持当前事务,如果没有事务则开启一个新事务。 2.PROPAGATION_SUPPORTS 如果存在事务,则支持当前事务,如果不存在,则以非事务方式执行。 3.PROPAGATION_MANDATORY 如果存在事务,则支持当前事务,如果不存在,则抛出异常。 4.PROPAGATION_REQUIRES_NE...

今晚的月色真美 401

spring事务管理小结

在ibm developer上面看到了这几篇文章,总结的很不错~  转载下   1、事务方法嵌套调用的迷茫(service层  AService.a()中调用了BService.b()方法)      通过spring的事务传播行为进行解决 2、多线程的困惑   参见:http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/...

xieyujun2006的专栏 176

spring service层事务管理小结

前言: 选择spring作为开发的框架,很大一部分因素是spring框架完善的事务处理机制,spring的事务实现主要分为两种,一种是基于Dao层,另一种是基于Service层,前者是针对单个dao的持久化操作做了事务控制,控制粒度比较小,后者则是基于业务的原则性需求,将一个原子性业务的操作做了事务控制,本文主要针对service层事务配置进行说明: 方法一:基于注解的service层事务...

wutongyuWxc的博客 4960

Spring事务无法回滚异常处理记录与小结

Spring事务的概述 事务(Transaction):在数据库中,可以保持一系列的数据操作要么全部执行成功,要么全部执行失败的机制!在基于Spring JDBC的编程中,只需要为业务方法加上@Transactional注解,就可以使得该业务方法中的多条数据操作是有事务的保障的,这多条数据操作要么全部成功,要么全部失败,不会出现成功一半且失败一半的问题! 主要原理是在提交2次sql事务时会现在内存中操作,然后没有异常了再提交到数据库,如果在内存中报错了那么就不提交到数据库以实现回滚. 摘自成大佬笔记-.-

weixin_45577016的博客 2137

转载spring hibernate事务小结

记录我在使用spring,hibernate的时候遇到的session,和事务管理的问题. spring用一个OpenSessionInView的filter来处理session was closed的问题.这个大家并不陌生. 我们项目当中的dao层有一个baseDao. 封装了一系列对持久化对象的操作方法.C,R,U,D 条件查询.分页查询.等等.而且baseDao当中的所有的find方...

sooxin的专栏 133
上一篇: 详解spring事务属性
下一篇: 如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件
wang20051
博客等级 码龄22年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值