zoukankan      html  css  js  c++  java
  • 添加业务层和事务机制

    配置声明式事务

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

      配置步骤:

        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     }
  • 相关阅读:
    [转]数值分析——多项式插值之Lagrange插值
    [转]上拉电阻&下拉电阻&高阻态
    [转]Verilog学习笔记基本语法篇(十三)...............Gate门
    Spring MVC中的Controller是Serlvet吗?
    preparestatement和statement的区别&&简单的SQL注入
    jquery局部变量和全局变量的错误
    js 中{},[]中括号,大括号使用详解
    Java数据库学习之SQL语句动态拼接
    jquery中关键字写错导致的错误——dataType写成dateType(data写成date)
    一次隐蔽的while死循环
  • 原文地址:https://www.cnblogs.com/xuerong/p/4923350.html
Copyright © 2011-2022 走看看