事务以及在Spring中实现事务管理

本文介绍了事务的概念、特性,以及不考虑隔离性引发的读、写问题及解决办法。还阐述了Spring中实现事务管理的两种方式:编程式和声明式,重点讲解了用注解方式实现声明式事务管理的步骤,包括引入开发包、配置管理器、开启注解等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是事务

事务:逻辑上的一组操作,组成这组操作的单元,要么全部成功,要么全部失败。

事务的特性

原子性:事务不可分割

一致性:事务执行前后数据完整性保持一致

隔离性:一个事务的执行不应该受到其他事务的干扰

持久性:一旦事务结束,数据就持久化到数据库

不考虑隔离性引发的安全性问题

读问题

     脏读:           一个事务读到另一个事务未提交的数据

     不可重复读:一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致

     虚读、幻读:一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致

写问题

     丢失更新

解决读问题

设置事务隔离级别

      Read uncommitted:未提交读,任何读问题都不能解决

      Read committed:    已提交读,解决脏读,但是不可重复读和虚读有可能发生

      Repeated read:      重复读,解决脏读和不可重复读,但是虚读有可能发生

      Serializeble:           解决所有读问题

Spring中实现事务管理的两种方式

一、编程式事务管理:

        将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式管理事务中,必须在每个事务操作中包含额外的事务管理代码。

二、声明式事务管理:

        它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理,Spring声明式事务管理建立在AOP基础之上,是一个典型的横切关注点,通过环绕增强来实现,其原理是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完毕之后根据执行情况提交或回滚事务,其模型如下:

public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
	try {
		//开启事务
		return joinPoint.proceed();
		//提交事务
	} catch (Throwable e) {
		//回滚事务
		throw e;
	}finally {
		//释放资源
	}
}

用注解方式实现声明式事务管理

1、引入aop的开发包

2、配置事务管理器

<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

3、开启注解事务

<!-- 开启注解事务 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

4、在业务层添加注解

@Transactional
public class UserService implements IUserService {
	private UserDao userDao;
	 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值