• Spring(十一)Spring事物


    事务是访问数据库的一个操作序列,DB应用系统通过事务集来完成对数据的存取。

    事务必须遵循4个原则,即常说的 ACID

    A,Automicity,原子性,即事务要么被全部执行,要么被全部不执行。如果事务下的子事务全部提交成功,则所有数据库操作被提交,否则,应进行事务回滚。

    C,Consistency,一致性,即状态转换必须是由一种正确的状态转换到另外一种正确的状态。

    I,Isolation,隔离性,即相互间必须不能被影响。

    D,Durabillity,持久性,即事务提交后将被永久保存,即便出现其他故障,事务处理结果也应得到保存。

    事务的隔离级别

    串行化,Serializable,一个事务在执行过程中完全看不到其他事务对数据库所做的更新。

    可重复读,Repeatable Read,一个事务在执行过程中可以看到其他事务已经提交的记录,但是不能看到其他事务对已有记录的更新。

    读已提交数据,Read Commited,一个事务在执行过程中可以看到其他事务已经提交的记录,而且能看到其他事务对已有记录的更新。

    读未提交数据,Read UnCommited,一个事务在执行过程中可以看到其他事务没有提交的记录,而且能看到其他事务没有提交的记录的更新

    简单介绍完事务之后,我们用一个例子来具体使用一下事务:购买股票的案例

    1.数据库

      1.1股票表

      

      1.2:账户余额表:

      

    2.实体类

      

      2.1:account类

      

      2.2:stock类

      

    3.dao 接口IAccountDao

      

      IAccountDaoImpl:

      

      IStockDao

      IStockDaoImpl:

      

      接下来创建Service

      

      

      然后写配置文件;

      

      然后是注解事物:只需要改service里就可以:

      

      @Transactional()
    public void buyStock(int aid, int abalance, int sid, int scount) throws Exception {
    //购买股票 买入 和抛出
    boolean isBuy=true;//购买股票
    accountDAO.updateAccount(aid,abalance,isBuy);
    /* if (true){
    throw new Exception("111");

    }*/
    stockDAO.updateStock(sid,scount,isBuy);

    }

    public IStockDAO getStockDAO() {
    return stockDAO;
    }

    public void setStockDAO(IStockDAO stockDAO) {
    this.stockDAO = stockDAO;
    }

    public IAccountDAO getAccountDAO() {
    return accountDAO;
    }

    public void setAccountDAO(IAccountDAO accountDAO) {
    this.accountDAO = accountDAO;
    }
    }

      

    还有最后一种AspectJ Aop注解方式

     

    <!--方式三:AspectJ AOP 注解-->
    <tx:advice id="stockAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="buy*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="StockException"/>

    </tx:attributes>
    </tx:advice>

    <aop:config>
    1.切点
    <aop:pointcut id="mypointcut" expression="execution(* *..service.impl.*.*(..))"></aop:pointcut>
    &3.顾问
    <aop:advisor advice-ref="stockAdvice" pointcut-ref="mypointcut"></aop:advisor>
    </aop:config>

    最后就是测试类:
      

    
    
    
    

      

      

      

  • 相关阅读:
    c++中的peek函数
    的坑
    Haroopad 写 markdown文本
    《剑指offer》第五十题(字符流中第一个只出现一次的字符)
    《剑指offer》第五十题(字符串中第一个只出现一次的字符)
    《剑指offer》第四十九题(丑数)
    《剑指offer》第四十八题(最长不含重复字符的子字符串)
    《剑指offer》第四十七题(礼物的最大价值)
    《剑指offer》第四十六题(把数字翻译成字符串)
    《剑指offer》第四十五题(把数组排成最小的数)
  • 原文地址:https://www.cnblogs.com/a157/p/8587267.html
Copyright © 2020-2023  润新知