没有合适的资源?快使用搜索试试~ 我知道了~
高级软件人才培训专家-day13-SpringBootWeb AOP
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 126 浏览量
2024-03-10
11:41:56
上传
评论
收藏 3.17MB PDF 举报
温馨提示
试读
54页
高级软件人才培训专家_day13-SpringBootWeb AOP
资源推荐
资源详情
资源评论
事务&AOP
1. 事务管理
1.1 事务回顾
在数据库阶段我们已学习过事务了,我们讲到:
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数
据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。
怎么样来控制这组操作,让这组操作同时成功或同时失败呢?此时就要涉及到事务的具体操作了。
事务的操作主要有三步:
1. 开启事务(一组操作开始前,开启事务):start transaction / begin ;
2. 提交事务(这组操作全部成功后,提交事务):commit ;
3. 回滚事务(中间任何一个操作出现异常,回滚事务):rollback ;
1.2 Spring事务管理
1.2.1 案例
简单的回顾了事务的概念以及事务的基本操作之后,接下来我们看一个事务管理案例:解散部门 (解
散部门就是删除部门)
需求:当部门解散了不仅需要把部门信息删除了,还需要把该部门下的员工数据也删除了。
步骤:
根据ID删除部门数据
根据部门ID删除该部门下的员工
代码实现:
1. DeptServiceImpl
@Slf4j
@Service
1
2
2. DeptMapper
3. EmpMapper
重启SpringBoot服务,使用postman测试部门删除:
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Autowired
private EmpMapper empMapper;
//根据部门id,删除部门信息及部门下的所有员工
@Override
public void delete(Integer id){
//根据部门id删除部门信息
deptMapper.deleteById(id);
//删除部门下的所有员工信息
empMapper.deleteByDeptId(id);
}
}
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Mapper
public interface DeptMapper {
/**
* 根据id删除部门信息
* @param id 部门id
*/
@Delete("delete from dept where id = #{id}")
void deleteById(Integer id);
}
1
2
3
4
5
6
7
8
9
@Mapper
public interface EmpMapper {
//根据部门id删除部门下所有员工
@Delete("delete from emp where dept_id=#{deptId}")
public int deleteByDeptId(Integer deptId);
}
1
2
3
4
5
6
7
8
代码正常情况下,dept表和Em表中的数据已删除
修改DeptServiceImpl类中代码,添加可能出现异常的代码:
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Autowired
private EmpMapper empMapper;
//根据部门id,删除部门信息及部门下的所有员工
@Override
public void delete(Integer id){
//根据部门id删除部门信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
重启SpringBoot服务,使用postman测试部门删除:
查看数据库表:
删除了2号部门
2号部门下的员工数据没有删除
deptMapper.deleteById(id);
//模拟:异常发生
int i = 1/0;
//删除部门下的所有员工信息
empMapper.deleteByDeptId(id);
}
}
15
16
17
18
19
20
21
22
23
以上程序出现的问题:即使程序运行抛出了异常,部门依然删除了,但是部门下的员工却没有删除,造
成了数据的不一致。
1.2.2 原因分析
原因:
先执行根据id删除部门的操作,这步执行完毕,数据库表 dept 中的数据就已经删除了。
执行 1/0 操作,抛出异常
抛出异常之前,下面所有的代码都不会执行了,根据部门ID删除该部门下的员工,这个操作也不会
执行 。
此时就出现问题了,部门删除了,部门下的员工还在,业务操作前后数据不一致。
而要想保证操作前后,数据的一致性,就需要让解散部门中涉及到的两个业务操作,要么全部成功,要
么全部失败 。 那我们如何,让这两个操作要么全部成功,要么全部失败呢 ?
那就可以通过事务来实现,因为一个事务中的多个业务操作,要么全部成功,要么全部失败。
此时,我们就需要在delete删除业务功能中添加事务。
剩余53页未读,继续阅读
资源评论
xiaoli8748_软件开发
- 粉丝: 8344
- 资源: 1427
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功