声明式事务
时间:2019-09-23
本文章向大家介绍声明式事务,主要包括声明式事务使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
声明式事务
1 事务与声明式事务的区别
1.事务:
把多个操作绑定在一起,要么全部成功,要么全部失败
2.声明式事务:
在程序中,指定开启或回滚事务的规则,程序根据设定好的规则,自动开启或回滚事务
2 声明式事务
2.1 我们第一步找到spring的配置文件
2.2 第二步我们就需要在你的标签里添加一下代码
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
ref=dataSource:这个dataSource是配置我们spring和MyBatis整合配置数据源的、
详情请看文档的第三点:spring和mybatis整合
2.3 设置事务属性
<!-- 设置事务属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 声明事务属性,定义事务开启规则-->
<tx:attributes>
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
我们的事务属性这里就简约的说一下事务传播机制:
表示如果存在一个事务,则支持当前事务,如果没有,则按非事务方式执行
表示如果存在一个事务,则支持当前事务,如果没有,则自己开启一个新的事务
补充:
表示总是开启一个新事务,如果一个事务已经存在,则将这个存在的挂起,开启新的事务
还有等等 比如NESTED....
而这个标签的name属性里面填写的是,你需要做的增删改查功能是什么需要开启事务传播机制
2.4 定义切面
因为我们事务是在spring增强的功能上实现的,所以我们还需要定义切面
<!-- 定义切面-->
<aop:config>
<!-- 定义切面-->
<aop:pointcut id="serviceMethod" expression="execution(* com.t239.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>
我们这就完成了声明式事务,我们还有一种方法就是使用注解形式
3 注解事务
我们做注解事务就更加简单一点:
3.1 首先我们第一步还是先定义事务管理器
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.2 我们第二步启动注解事务
将定义的事务管理器添加进去
<!-- 启动注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
3.3 我们就可以在你的需要事务处理的方法前加注解
我们通过注解进行事务回滚,以及提交,注解如下:
@Transactional
将这个注解添加到类前面,这个类所有的方法有有事务回滚提交功能
将这个添加到方法前,就只能对方法使用
Transactional的属性不止一种,有很多比如:
@Transactional(propagation= Propagation.SUPPORTS)
@Transactional(propagation=Propagation.REQUIRED)
等等等,这里就不一一解释说明了
原文地址:https://www.cnblogs.com/liujunwei/p/11573273.html
- 一个完整的用于追踪数据改变的解决方案
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- 通过内存分析工具来证明字符串驻留机制
- 如果在BackgroundWorker运行过程中关闭窗体…
- 从数据到代码——基于T4的代码生成方式
- 解决T4模板的程序集引用的五种方案
- 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"
- 从yield关键字看IEnumerable和Collection的区别
- 让“链式调用(方法链)”更加自然一点
- ASP.NET应用下基于SessionState的“状态编程框架”解决方案
- 为自定义配置的编辑提供”智能感知”的支持
- 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
- 在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法