本篇文章主要介绍事务
基于上篇文章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,操作更方便哦