Day46(16)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project02\tlias-web-management
事务管理
@Transactional(rollbackFor = {Exception.class})//事务管理的注解 - 默认出现RuntimeException才会回滚
@Override
public void save(Emp emp) throws Exception{
//1.保存员工的基本信息
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
empMapper.insert(emp);
//int i = 1/0;arithmetic exception属于运行时异常,可以被识别
if (true){
throw new Exception("出错啦~~~");
}
//2.保存员工的基本工作经历信息
List<EmpExpr> exprList = emp.getExprList();
if (!CollectionUtils.isEmpty(exprList)){
//遍历集合,为empId赋值
exprList.forEach(empExpr->{
empExpr.setEmpId(emp.getId());
});
empExprMapper.insertBatch(exprList);
}
}
事务的传播行为
事务嵌套
- 保证有异常还能继续执行:finally
- 保证不被回滚:REQUIRES_NEW
@Transactional(propagation = Propagation.REQUIRES_NEW)//需要在一个新的事务中运行,避免运行之后被回滚
@Override
public void insertLog(EmpLog empLog) {
empLogMapper.insert(empLog);
}
@Transactional(rollbackFor = {Exception.class})//事务管理的注解 - 默认出现RuntimeException才会回滚
@Override
public void save(Emp emp) throws Exception{
try {
//1.保存员工的基本信息
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
empMapper.insert(emp);
int i = 1/0;//arithmetic exception属于运行时异常,可以被识别
// if (true){
// throw new Exception("出错啦~~~");
// }
//2.保存员工的基本工作经历信息
List<EmpExpr> exprList = emp.getExprList();
if (!CollectionUtils.isEmpty(exprList)){
//遍历集合,为empId赋值
exprList.forEach(empExpr->{
empExpr.setEmpId(emp.getId());
});
empExprMapper.insertBatch(exprList);
}
} finally {//放到finally中无论事务成功与否都会提交日志
// 但是提交后被回滚了,所以不能成功保存日志,所以需要单独开启新事务,去empLogService对应的impl中添加transactional注解,并声明
//记录操作日志:调用另外一个service
EmpLog empLog = new EmpLog(null, LocalDateTime.now(), "新增员工:" + emp);
empLogService.insertLog(empLog);
}
}
文件上传
debug运行之后可以查看file的存放地址
C:\Users\Lenovo\AppData\Local\Temp\tomcat.8080.89517753953083888\work\Tomcat\localhost\ROOT
如果没有保存文件,程序运行结束之后,或者debug跳过改断点将程序运行完之后,会将上面该临时文件夹中的数据清空删除!!!
文件上传
本地存储
springboot文件上传最大单个文件上传大小为1mb,超过会报错无法上传。
需要在application.yml中配置文件上传大小的配置,输入multipart就可以搜到
servlet:
multipart:
#最大单个文件大小
max-file-size: 10MB
#最大请求大小(包括所有文件和表单数据)
max-request-size: 100MB
package com.itheima.controller;
import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Slf4j
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(String name, Integer age, MultipartFile file) throws IOException {
log.info("接收的参数:{},{},{}",name,age,file);
//获取原始文件名
String originalFilename = file.getOriginalFilename();
//新的文件名
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
String newFileName = UUID.randomUUID().toString() + extension;
//保存文件
//file.transferTo(new File("F:/images/"+originalFilename));
file.transferTo(new File("F:/images/"+newFileName));
return Result.success();
}
}
只需要在controller里面配置

浙公网安备 33010602011771号