本人也是踩过无数坑,今天写一篇,希望能帮助到大家。
先说说事务的几个必要点:
1.配置事务管理
2.类或者方法上加上 @Transactional(只对public有效)
3. 抛出异常,这一个必须要。抛出异常事务才能够回滚。当方法抛出异常时,状态回滚,如果catch异常,则回滚无效
罗列一下配置文件吧下面:
spring-mybaits.xml
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 注解方式配置事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
spring-mvc.xml
下面这个最容易出错,要是扫描了全部的包,事务就失效了。楼主踩的的这儿坑。这段代码意思是只扫描controller包,use-default-filters:默认是扫描所有,false就是不扫描其他包。(spring-mvc.xml中只需要扫描@Controller注解)
<!--扫描Controller-->
<context:component-scan base-package="com.zht.evaluation" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
代码部分:
可以在controller捕获异常
@Transactional
public void deleteCut(String userId)throws RuntimeException {
String companyId = StringBoom.toString(LoginSession.val(LoginSession.COMPANY_ID));
userMapper.deleteCust(userId, companyId);
userMapper.deleteUserPost(companyId,userId);
userMapper.deleteUserDepartment(companyId,userId);
到此结束,谢谢!