自我学习SSM框架集成(三)

关于事务管理

  对于数据库的增删改查有时候要求两件事只能同时发生或者同时不发生,这时候就要使用事务管理

       做事务管理需要额外的jar才行,所以先下载aspectjweaver.jar,并添加至Idea中。

      然后再用以下两种方法进行实现

 

SSM事务管理的实现(一)

通过XML配置方式:修改applicationContext,以支持AOP方式

<!--     <tx:annotation-driven transaction-manager="transactionManager"/> -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource" />

    </bean>

     

    <tx:advice id="txadvice" transaction-manager="transactionManager">  

        <tx:attributes>  

            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />  

            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="edit*" propagation="REQUIRED" rollback-for="Exception" />

            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>  

            <tx:method name="list*" propagation="REQUIRED" rollback-for="Exception"/>  

        </tx:attributes>  

    </tx:advice>  

        

    <aop:config>  

        <aop:pointcut id="serviceMethod" expression="execution(* com.how2java.service.*.*(..))"/>  

        <aop:advisor pointcut-ref="serviceMethod" advice-ref="txadvice"/>  

    </aop:config>       

"execution(* com.how2java.service.*.*(..))"
这个意思是对于service文件夹下的所有文件夹的所有类方法来搜索txadvice中提到的方法 然后进行捆绑回滚

SSM事务管理的实现(二)

一、修改applicationContext添加 

 <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource" />

    </bean>

二、对为addTwo方法加上事务注解

@Service

public class CategoryServiceImpl  implements CategoryService{

    @Autowired

    CategoryMapper categoryMapper;

     

    public List<Category> list(){

        return categoryMapper.list();

    }

 

    public void deleteAll() {

        List<Category> cs = list();

        for (Category c : cs) {

             

            categoryMapper.delete(c.getId());

        }

    }

     

    @Override

    @Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")

    public void addTwo() {

         

        Category c1 = new Category();

        c1.setName("短的名字");

        categoryMapper.add(c1);

         

        Category c2 = new Category();

        c2.setName("名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,名字长对应字段放不下,");

        categoryMapper.add(c2);

    };

 

}
 

 

posted @ 2019-01-26 17:50  饼先生  阅读(102)  评论(0编辑  收藏