Spring -事务管理

koke
2023-11-05 / 1 评论 / 140 阅读 / 正在检测是否收录...
什么是事务?


 

MySQL操作


 

Spring操作


 

开启事务管理日志


 

代码示例

/*
* 删除部门
* */
    @Transactional //spring 事务管理
    @Override
    public void delete(Integer id) {
        //根据id删除部门
        deptMapper.deleteById(id);
        int i =1/0; //模拟异常
        //根据部门id 删除部门下的员工
        empMapper.deleteByDeptId(id);
    }

    //结果:异常,数据回滚。

 

事务属性


 

代码示例

/*
* 删除部门
* */
    @Transactional(rollbackFor = Exception.class) //spring 事务管理
    @Override
    public void delete(Integer id) throws Exception {
        //根据id删除部门
        deptMapper.deleteById(id);
        //模拟异常
        if (true){
            throw new Exception("出错了...");
        }

        //根据部门id 删除部门下的员工
        empMapper.deleteByDeptId(id);
      
       //结果:不论什么异常,数据都会回滚。
    }

 

事务属性


 
lolbmrc1.png
 

代码示例

/*
* 删除部门
* */
    @Transactional(rollbackFor = Exception.class) //spring 事务管理
    @Override
    public void delete(Integer id) throws Exception {
        try {
            //根据id删除部门
            deptMapper.deleteById(id);
            int i =1/0; //模拟异常
            // if (true){throw new Exception("出错了。。。");}
            //根据部门id 删除部门下的员工
            empMapper.deleteByDeptId(id);

        } finally {
            DeptLog deptLog = new DeptLog();
            deptLog.setCreateTime(LocalDateTime.now());
            deptLog.setDescription("执行了解散部门的操作,此次解散的是"+id+"号部门");
            deptLogService.insert(deptLog);
        }

    }
//我把它理解为事物的嵌套,无论外部事务是否回滚,此事务正常执行
//无论删除部门是否出错,都会进行日志记录
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @Override
    public void insert(DeptLog deptLog) {
        deptLogMapper.insertLog(deptLog);
    }
1

评论 (1)

取消
  1. 头像
    古古怪怪
      MacOS · Google Chrome  IP属地:上海

    赞一个

    回复