SSM框架整合——事务管理

事务管理实例体验:
A-B转账:A减去100元,将这100元加到B账户上,这里需要两条update语句,如果在两条update语句出现了一些错误,那么对于先执行的A来说是不公平的。所以就有了事务ACID特性

事务ACID特性:

一、原子性:

事务开始不会停留在中间,要么恢复到之前未执行事务的状态,要么在执行完事务的状态。

二、一致性:

数据库是有一个正确的状态到另一个正确的状态,不应该出现不符合常理和业务的状态。

三、隔离性:

两个相同的事务或者多个事务并发操作数据库时,应该隔离每一个事务间的影响。

四、持久性:

事务完成后,对于数据库的改变应该是永久的。

事务管理(注解方式):

在applicationContext-Service.xml中,添加

<!--    事务管理器(这个不管哪种方法这个都要配置)-->
    <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--        配置数据库源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!--    注解方式事务管理-->
    <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>

在XML中配置后,我们需要在业务层(Service)添加我们的@Transactional注解,来让spring替我们进行事务管理。

    @Transactional
    public void insertUser(User user) {
//        调用Dao的插入方法
        userDao.insertUser(user);
        int i=1/0;   //添加一个必然会错的语句
        userDao.insertUser(user);
    }

在这里插入图片描述
必然会报错除数不能等于0的错误,但是我们发现这个方法中除于0的语句之前的语句也不会执行成功,这便是事务管理。


事务管理(XML方式):

<!--XML配置-->
    <tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">
        <tx:attributes>
            <!-- 传播行为 -->
            <!--REQUIRED 行为,如果业务中已经有在使用的事务,那么就不会新建事务了,没有得话就会创建新的事务-->
            <tx:method name="insert*" propagation="REQUIRED" />
            <!--SUPPORTS有事务用事务,没有的话会以非事务类型运行,read-only 代表不会对数据库进行改变-->
            <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> 
        </tx:attributes>
    </tx:advice>
    <!-- 切面 -->
    <aop:config> 	
    <!--        使用Execution表达式需要添加aspectjweaver包。* com.ronghao.Service.*.*(..) 代表匹配Service包下的所有任意参数的任意方法-->
        <aop:pointcut id="txpointcut" expression="execution(* com.ronghao.Service.*.*(..))" />
        <aop:advisor pointcut-ref="txpointcut" advice-ref="txAdvice" />
    </aop:config>

两种方法的区别:

当业务方法少的时候使用注解的方法简单方便,一般情况下都不会很少,所以都会用xml方式配置


我已经上传项目到我的资源上了
SSM简单整合


**

有遇到问题可以私信,24小时内必回

**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值