• 添加业务层和事务机制


    配置声明式事务

      核心问题是:对哪些方法,采取什么样的事务策略

      配置步骤:

        1、导入tx和aop命名空间

        2、配置事务管理器,并为其注入SeesionFactory

        3、基于该事务管理器配置事务增强,指定事务规则

        4、定义切入点

        5、织入事务切面

     主单和明细单是1对多的关系

    1、增加明细

      a、首先判断主单是否为null  如果为null 那么返回null

      b、判断主单的id是否==0,否的话:先把明细单添加进库,拿到主单的总金额totalAccount,然后加上详细单的总金额,

      一起添加到主单,更新主单数据,把明细单的数据都加到主单里

      判断,有主单就可以加明细了,然后把数据设置进去

      c、判断主单id是否==0,是==0:先把主单入库,后面添加否的(

        先把明细单添加进库,拿到主单的总金额totalAccount,然后加上详细单的总金额,

        一起添加到主单,更新主单数据,把明细单的数据都加到主单里)

      判断,没有主单,就得先添加主单然后再添加明细,添加数据

     1     <!-- 声明式事务   就是不用写代码记hibernateTransactionManager-->
     2     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     3         <property name="sessionFactory" ref="sessionFactory"></property>
     4     </bean>
     5     <!-- 事务的增强处理类 -->
     6     <tx:advice id="txAdive" transaction-manager="transactionManager">
     7         <tx:attributes>
     8             <tx:method name="add*" />
     9         </tx:attributes>
    10     </tx:advice>
    11     <aop:config>
    12         <aop:pointcut expression="execution(public * cn.bdqn.service.*.*(..)))" id="myPointcut"/>
    13         <aop:advisor advice-ref="txAdive" pointcut-ref="myPointcut"/>
    14     </aop:config>    
     1 //增加明细
     2     @Override
     3     public ClaimVoucher addDetail(ClaimVoucherDetail cd) {
     4         ClaimVoucher master = cd.getMaster();
     5         if(master == null){
     6             return null;
     7         }
     8         if(master.getId() == 0){
     9             //没有主单就创建一个主单
    10             this.claimVoucherDao.add(master);
    11             /*if(true){
    12                 throw new RuntimeException("test runtime error");
    13             }*/
    14             //有主单添加明细单
    15             this.claimVoucherDetailDao.add(cd);
    16             //拿到主单总金额
    17             Double totalAccount = master.getTotalAccount();
    18             //设置总金额
    19             master.setTotalAccount(totalAccount+cd.getAccount());
    20             //更新数据
    21             this.claimVoucherDao.update(master);
    22             //加入主单
    23             master.getDetails().add(cd);
    24 //            master=this.find(master.getId());
    25         }else{
    26             //有主单添加明细单
    27             this.claimVoucherDetailDao.add(cd);
    28             //拿到主单总金额
    29             Double totalAccount = master.getTotalAccount();
    30             //设置总金额
    31             master.setTotalAccount(totalAccount+cd.getAccount());
    32             //更新数据
    33             this.claimVoucherDao.update(master);
    34             //加入主单
    35             master.getDetails().add(cd);
    36 //            master=this.find(master.getId());
    37         }
    38         System.out.println(master);
    39         return master;
    40     }
    41     //主单查找
    42     @Override
    43     public ClaimVoucher find(Serializable id) {
    44         // TODO Auto-generated method stub
    45         
    46         ClaimVoucher c = this.claimVoucherDao.find(id);
    47         Set<ClaimVoucherDetail> results = (Set<ClaimVoucherDetail>) this.claimVoucherDetailDao.getDetails(id);
    48         System.out.println(results.size()+"..");
    49         
    50 //        Arrays.asList(results.toArray());
    51         //把明细赋值到主单上
    52         c.setDetails(results);
    53 //        c.getDetails().addAll(results);
    54         System.out.println("========"+c);
    55         return c;
    56     }
  • 相关阅读:
    假期12
    假期11
    第十六章 IP子网的划分
    第十五章 链路聚合基本原理及其基本配置
    第十四章 交换机端口技术
    第十七章 nginx动静分离和rewrite重写
    第十六章 四层负载均衡
    第十五章 nginx七层负载均衡
    第十四章 nginx代理配置
    每日日报
  • 原文地址:https://www.cnblogs.com/xuerong/p/4923350.html
Copyright © 2020-2023  润新知