ssm整合 spring+springMvc+mybatis简单demo aop事务篇

本文深入探讨Spring AOP在事务管理中的应用,通过实例演示如何配置事务的ACID特性,确保数据操作的一致性和可靠性。

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

	本篇文章主要介绍事务

基于上篇文章https://blog.youkuaiyun.com/weixin_42275175/article/details/97936294,上篇文章有完整的项目下载地址。

事务是指一组逻辑单元,运行时要么全部成功,要么全部不成功,事务是关系型数据库特有的机制,可以保证数据的完整性。

事务的特性ACID特性
1:原子性-原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.
2:一致性-一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
3:隔离性-隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4:持久性-持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

使用spring-aop对事务进行统一管理。
aop可以设置一个切面,当这个切面的目标类,被调用的时候,进行一个功能增强。

现在实现一个简单不能再简单的业务:
添加同一个用户,两次.
contorller层

	@RequestMapping("/test.action")
	public void test(int id){
		User user=new User();
		user.setId(5);
		user.setName("张三");
		userService.addUser(user);
	}

实现类

	public void addUser(User user) {
		
		userMapper.insertSelective(user);
		userMapper.insertSelective(user);
	}

开始测试:。数据库的主键是不能重复的,
所以数据库添加了一次张三
在这里插入图片描述
接下来,我们来配置spring-mybatis.xml

<!-- 待定:事务管理  aop待完成 -->
	<!-- spring提供了声明式的事务管理机制 -->
	<!-- 配置事务管理器,让spring的事务管理器去对事务进行统一管理 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	
	<!-- 设置切面   把事务管理的切面设置在service实现类这一层-->
	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* com.oracle.ssm.service.impl.*.*(..))" />
	</aop:config>
	
	<!-- 切面增强   spring提供了自带的事务增强类  tx
	设置一下tx事务增强类的传播特性
	
	-->
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 传播行为 
			tx method指定 切面路径下 方法名 name=xxx 此次的事务传播行为
			required 需要使用事务进行统一管理
			read-only=true 只读模式,查询行为,不需要事务进行管理
			对于增删改开头的方法,使用事务进行管理
			对于查询开头的方法,只读
			
			-->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>

把数据库张三的删掉,再次访问一次。
在这里插入图片描述
事务已经管理成功了。那么这个小demo也就结束了。下面给上完整项目下载地址:
链接:https://pan.baidu.com/s/1AeX-RBRp3Hg0VgLNlSw3RA
提取码:gh7h
复制这段内容后打开百度网盘手机App,操作更方便哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值