黑马JavaWeb+AI笔记 Day09 Web后端实战(员工管理-新增员工)

一、保存员工基本信息


二、保存员工工作经历信息

✅ 批量插入工作经历(MyBatis 动态 SQL)

使用 <foreach> 标签循环插入:

<insert id="insertExprList">
  INSERT INTO emp_expr (emp_id, company, begin, end, job)
  VALUES
  <foreach collection="list" item="expr" separator=",">
    (#{expr.empId}, #{expr.company}, #{expr.begin}, #{expr.end}, #{expr.job})
  </foreach>
</insert>

✅ 插入后获取主键 ID

@Insert("INSERT INTO emp (...) VALUES (...)")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(Emp emp);


三、Spring 事务管理

💡 场景问题

如果成功保存了 emp 表中的数据,却因异常没插入 emp_expr,会导致数据不一致。
👉 必须将两步操作放入一个事务中!


✅ 什么是事务(Transaction)?

  • 一组操作,要么全部执行成功,要么全部失败
  • 是数据库中保证数据一致性的机制

✅ 手动事务控制(了解)

START TRANSACTION;
-- 执行多条 SQL
COMMIT; -- 或 ROLLBACK;

✅ SpringBoot 中事务控制(重点)

使用注解 @Transactional

作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务

位置:业务(service)层的方法上、类上、接口上

@Service
public class EmpService {
    @Transactional
    public void saveEmp(Emp emp) {
        empMapper.insert(emp);
        empExprMapper.insertBatch(emp.getExprList());
    }
}

✅ 异常回滚说明

  • 默认:只回滚 RuntimeException
  • 想回滚其他异常 → 设置 rollbackFor
@Transactional(rollbackFor = Exception.class)

✅ 事务传播行为(了解)

指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制(propagation

行为说明
REQUIRED默认,加入当前事务
REQUIRES_NEW创建新事务,暂停旧事务

适用于:主方法 + 日志记录方法分别管理事务


四、文件上传

✅文件上传

将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。

文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。


✅前端页面三要素

method="post" enctype="multipart/form-data input type="file"

<form action="/upload" method="post" enctype="multipart/form-data">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="file"><br>
        <input type="submit" value="提交">
    </form>

1、本地存储

✅ 步骤
// 获取原始文件名
String fileName = multipartFile.getOriginalFilename();

// 转存到服务器指定路径
multipartFile.transferTo(new File("D:/upload/" + fileName));
⚠️ 注意
  • 文件大小限制默认 1MB

    • 配置方式(application.yml):
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 50MB

⚠️缺点:无法公网访问、磁盘容量有限、不可靠


2、阿里云 OSS 上传(企业推荐)

✅ OSS 简介

OSS(Object Storage Service)是阿里云提供的对象存储服务,支持上传图片、音频、视频等文件,提供外链访问。

✅ 使用步骤
  1. 注册阿里云账号并实名认证
  2. 充值并开通 OSS 服务
  3. 创建 Bucket(存储空间)
  4. 获取 AccessKey(ID + Secret)
  5. 安装官方 SDK,使用 Java 上传

可以参考官方文档:OSS Java SDK快速入门


✅ 项目集成流程
① 添加 SDK 依赖
<dependency>
  <groupId>com.aliyun.oss</groupId>
  <artifactId>aliyun-sdk-oss</artifactId>
  <version>3.15.1</version>
</dependency>
② 编写上传工具类
public class AliOssUtils {
    public String upload(MultipartFile file) {
        // 连接 OSS,上传,返回文件外链 URL
    }
}
③ 上传接口
@PostMapping("/upload")
public Result upload(MultipartFile file) {
    String url = aliOssUtils.upload(file);
    return Result.success(url);
}

3、参数配置优化方式

方法特点说明
@Value单个字段注入,适合少量配置
@ConfigurationProperties一次性绑定多个配置项到 Java Bean ✅ 推荐

✅ 示例

aliyun:
  oss:
    endpoint: xxx
    accessKeyId: xxx
    accessKeySecret: xxx
    bucketName: xxx
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOssProperties {
    private String endpoint;
    private String accessKeyId;
    ...
}


✅ 总结表格

模块核心内容
新增员工拆分 emp、emp_expr 表,批量插入,注意主键回填
事务控制使用 @Transactional,保证多表数据一致性,支持异常控制
文件上传本地上传入门,阿里云 OSS 企业应用推荐,掌握 SDK 使用流程
参数注入方式@Value 适用于少量,@ConfigurationProperties 适合批量注入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值