• 添加业务层和事务机制


    配置声明式事务

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

      配置步骤:

        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     }
  • 相关阅读:
    jquery学习以及下载链接
    iOS:进度条控件的详细使用
    iOS: 工具栏控件UIToolBar和工具栏按钮控件UIBarButtonItem的使用
    iOS:分段控件UISegmentedControl的详细使用
    iOS:分页控件UIPageControl的使用
    iOS:提示框(警告框)控件UIActionSheet的详解
    iOS:风火轮活动刷新视图控件UIActivityIndicatorView的详细使用
    iOS:UIPageViewController翻页控制器控件详细介绍
    iOS:提示框(警告框)控件UIAlertView的详解
    iOS:网络编程的第三方框架:AFNetworking、SDWebImage
  • 原文地址:https://www.cnblogs.com/xuerong/p/4923350.html
Copyright © 2020-2023  润新知