一、思考
保存员工的基本信息(emp)成功了,市而保存工作经历(emp_expr)失败了,是否OK?
不可以
保存员工信息成功了,保存工作经历失败了会造成数据库数据不完整、不一致,很严重
所以用到了新的技术点 - 事务管理
4-25上午
什么是事务?
一组操作的集合,要么一起成功要么一起失败
注意:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
如何控制事务?
事务控制主要三部分:开启事务、提交事务/回滚事务
场景?
银行转账、下单扣减库存
代码实现事务管理(后续补上)
4-25下午
1.Spring事务管理:一组操作的集合,要么一起成功要么一起失败
(1)注解: @Transactional
加在方法上面开启事务
(2)属性:@Transactional(rollbackFor = Exception.class)
点一:默认是RuntimeExcetion,所以有时候看不到事务的控制是因为异常范围
点二:事务的传播行为
REQUIRED:大部分场景
REQUIRES_NEW:希望两个方法在独立的事务中运行,互不影响
(3)事务4大特征和事务常出现的几个问题(通过设置事务隔离级别解决)
原子性、一致性、隔离性、持久性
2.总结
并发事务会出现的问题(面试常问!!!记住)
1、什么是事务?
2、项目中怎么处理事务的?在方法上加注解@Transactional
3、即使有这个@TransactionaL注解是否有事务也不生效的情况?
1、异常范围捕获的不对
2、事务的传播行为
4、事务的特征?
ACID:原子性一致性隔离性持久性
5、并发事务会有哪些问题?
脏读(读取到了别的事务未提交的数据)
不可重复读(同一个事务下两个查询语句看到的结果不一样)
幻读(两个查询到的数据的数量不一致)
6、怎么解决并发事务的问题?
设置隔离级别
读未提交 什么问题都没解决
读已提交 脏读
可重复读(mysqL默认) 不可重复读脏读
串行化 幻读 不可重复读 脏读
三块内容:
-员工新增
-事务管理
-文件上传
一、员工新增功能
1.写功能的规则:
第一点: API 文档分析(请求方式、参数、返回值已统一可略)
一个表对应一个实体类对应一个Mapper,
一个Service可以注入多个mapper,
一个Controller可以注入多个Service
第二点: sql 表编写
员工表、员工经历表
第三点: 写业务功能的思路
(1)根据API接口文档写Controller
(2)Service做业务处理 (1.设置默认值 2. 保存员工表 3. 保存员工工作经历表)
(3) Mapper中mybatis的动态SQL
<where> <if> <foreach collection='变量名' item="对象别名" separator> <set> sql片段 <inclued>
二、事务管理
第一点概念:一组操作的集合,要么全部成功,要么全部失败
第二点: 怎么控制事务?
begin;
执行SQL;
commit/rollback
第三点: (1)项目中控制事务的方式是在方法上面加注解 @Transactional
(2)@Transactional 上可以添加属性
rollbackfor : 控制异常的范围 Exception.class
propagation: 控制事务传播行为
默认是REQUIRED: (方法一点要以事务方式运行)
REQUIES_NEW: 会创建自己的事务
第四点(★★★)
面试题
1、什么是事务
2、事务的特征
3、项目中怎么控制事务
4、注解上可以添加什么属性
5、并发事务会有什么问题
6、怎么解决并发事务的问题
三、文件上传
第一点
基本知识
前端:3要素 1、请求方式一定是post 2、enctype=mutilpart/data 3 、input的type类型是File
后端接收文件 MultiPartFile
第二点
本地保存
(1) MultiPartFile提供的transterTo
(2) 注意:修改文件名
阿里云OSS文件存储
1、开通账号
2、创建AccessKey
3、创建bucket
4、从官网上拷贝的
补充文件上传优化:
当阿里云上传文件配置内容过多时,有两种方法将配置代码统一起来方便后期维护。
@Value注解->适用于配置内容较少的情况,后期方便修改内容
@ConfigurationPropertie注解 ->适用于配置内容较多的情况,直接getset调用即可
推荐阅读:
文章有(0)条网友点评