• 自我学习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);
    
        };
    
     
    
    }
     
  • 相关阅读:
    Trie Tree和Radix Tree
    DataNode Layout升级解决Du操作引发的性能问题
    Write-Ahead Log(WAL)的工作原理
    YARN的共享存储服务
    AWS S3存储基于Hadoop之上的一致性保证
    简单聊聊HDFS RBF第二阶段工作近期的一些进展
    基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者
    基于 Confluence 6 数据中心的 SAML 单点登录设置 SSL/TLS
    Confluence 6 基于 Confluence 数据中心的 SAML 单点登录
    Confluence 6 用自带的用户管理
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/10324514.html
Copyright © 2020-2023  润新知