springboot 事務管理 @Transactional

1、當方法上沒有加  @Transactional ,此時執行刪除操作,在刪除操作後出現了異常,此刻刪除操作是不會回滾的。

   public void deleteEmpById(Integer empNo){
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria criteria = empExample.createCriteria();
        criteria.andEmpnoEqualTo(empNo);

            empMapper.deleteByExample(empExample);
            
            //此處出現了異常
            int a = 1/0;
  

    }

2、當方法上帶有 @Transactional,如果執行刪除操作,在刪除操作後出現了異常,此刻刪除操作回滾。
3、當方法上帶有 @Transactional,如果執行刪除操作,在刪除操作後出現了異常,但是你try-catch 處理了這個異常,並未拋出異常,此刻刪除操作不會回滾。 可以使用 throw new RuntimeException("出錯了"); 讓刪除回滾。

    @Transactional
    public void deleteEmpById(Integer empNo){
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria criteria = empExample.createCriteria();
        criteria.andEmpnoEqualTo(empNo);
        empMapper.deleteByExample(empExample);
        try {
            int a = 1/0;
        }catch (Exception e){

        }
    }

4、@Transactional 註解應該只被應用到 public 方法上,這是由 Spring AOP 的本質決定的。如果你在 protected、private 或者默認可見性的方法上使用 @Transactional 註解,這將被忽略,也不會拋出任何異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章