事务管理-事务回顾-spring事务管理

目录

事务回顾

Spring事务管理

案例

Spring事务管理


事务回顾

  • 概念:事务是一组操作的集合,它是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败
  • 事务操作
    • 开启事务(一组操作开始前,开启事务):start transaction / begin;
    • 提交事务(这组操作全部成功后,提交事务):commit;
    • 回滚事务(中间任何一个操作出现异常,回滚事务):rollback;
  • 具体参照文章:MySQL-事务-介绍与操作_熵240的博客-CSDN博客

                                MySQL-事务-四大特性_熵240的博客-CSDN博客 

Spring事务管理

案例

  • 解散部门:删除部门,同时属于该部门下的员工也需要被删除
  • 原实现代码
    •     /**
           * 根据id删除部门信息
           *
           * @param id
           */
          @Delete("delete from dept where id =#{id}")
          void deleteByID(Integer id);
    • 仅仅删除了部门信息,但员工信息仍然关联该部门信息

  • 完善后的代码

    • 思路:在根据部门id删除部门信息后,接着执行根据部门ID删除员工信息的操作

    • EmpMapper接口类

      •     /**
             * 根据部门ID删除员工信息
             *
             * @param DeptID
             */
            @Delete("delete from emp where dept_id=#{DeptID}")
            void DeleteByDeptID(Integer DeptID);
      • 只需要在EmpMapper接口中设置根据部门id删除员工信息的方式即可,直接操作数据库,不涉及控制层和业务层的逻辑。
    • DeptServiceImpl类 
      •     @Override
            public void deleteByID(Integer id) {
                deptMapper.deleteByID(id);
                empMapper.DeleteByDeptID(id);
            }

    • 上述代码依然存在问题,当根据id删除部门信息操作成功之后,如果出现代码错误,导致未执行删除该部门下的员工信息,也会造成数据的不一致不完整。
  • 因此为了保证数据库中的完整性和一致性,就需要让根据部门ID删除部门信息根据部门ID删除员工信息的操作要么都成功,要么都失败。即让其处于同一个事务当中

Spring事务管理

  • 注解:@Transactional
  • 位置:业务层(Service)的方法上、类上、接口上。
    • 作用在方法上
      • 该方法交给Spring事务管理
    • 作用在类上
      • 该类中的所有方法都交给Spring事务管理
    • 作用在接口上
      • 实现该接口的所有类下的所有方法都交给Spring事务管理
  • 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;如果在方法运行过程中出现异常,就会回滚事务。
  •     @Transactional // todo 将deleteByID(Integer ID)方法交给Spring事务管理,以确保数据的一致性和完整性
        @Override
        public void deleteByID(Integer id) {
            deptMapper.deleteByID(id);
            empMapper.DeleteByDeptID(id);
        }

你可能感兴趣的:(Java,Web学习跟踪笔记,spring,sql,java,事务,Transactional注解)