一,后端简单新增功能实现
以tlias 案例新增员工
新增员工及批量保存工作经历的实现逻辑
- 数据模型设计
员工实体类 Emp
包含员工基本信息(用户名、密码、姓名、性别、手机号等)
包含外键字段 deptId 关联部门
时间戳字段 createTime 和 updateTime
重要的是包含一个工作经历列表 exprList,用于存储该员工的所有工作经历
工作经历实体类 EmpExpr
包含工作经历的基本信息(开始时间、结束时间、公司名称、职位)
通过 empId 字段与员工表关联 - 控制层实现 (EmpController)
–使用 @PostMapping 注解定义新增员工接口:
–接收前端传递的 Emp 对象(包含基本员工信息和工作经历列表)
–调用服务层 empService.save(emp) 方法完成保存操作 - 服务层实现 (EmpServiceImpl)
@Transactional 注解确保整个保存过程的事务性:
设置员工的创建时间和更新时间
调用 empMapper.insert(emp) 将员工基本信息插入数据库
使用 MyBatis 的 @Options(useGeneratedKeys = true, keyProperty = “id”) 注解,在插入后自动获取生成的主键ID
–检查员工是否有关联的工作经历列表
–如果有工作经历,则遍历列表,为每条工作经历设置对应的员工ID
-调用 empExprMapper.insertBatch(exprList) 批量插入工作经历数据 - 数据访问层实现
EmpMapper
使用 @Insert 注解定义员工插入SQL语句
EmpExprMapper
定义批量插入方法 insertBatch
EmpExprMapper.xml
–使用 MyBatis 的标签实现批量插入 SQL:
–通过循环 exprList 集合构建批量插入语句
–将所有工作经历一次性插入到数据库中
二,Spring事物管理
事务(Transaction)的概念:
事务是数据库管理系统执行过程中的一个逻辑单位,由一个或多个数据库操作组成,这些操作要么全部执行成功,要么全部不执行,是一个不可分割的工作单位。
事务的四大特性(ACID)
原子性(Atomicity):事务作为一个整体执行,包含的所有操作要么全部完成,要么全部不执行。如果其中任何一个操作失败,整个事务都会回滚到事务开始前的状态。
一致性(Consistency):事务执行前后,数据库必须从一个一致状态转换到另一个一致状态。事务不能破坏数据库的完整性约束。
隔离性(Isolation):并发执行的多个事务之间相互隔离,互不干扰。每个事务都感觉不到系统中其他事务在并发执行。
持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,即使系统出现故障也不会丢失。
spring事物管理:
当前方法(一般在业务层的代码里面)加上注解:@Transactional
当一段代码操作多个数据库时,第一次操作成功,但第二次操作失败时,机会进行事物回滚,撤销第一次操作,避免了数据的不一致性和不完整性
hecked异常和unchecked异常
这里之所以让大家清楚checked异常和unchecked异常概念,是因为:
Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback;如果发生的异常是checked异常,默认情况下数据库操作还是会提交的。
三,文件上传
一.在前端开发中,文件上传的三个关键要素如下:
文件上传三要素
— 表单的 method 属性必须是 POST
文件上传需要使用 POST 方法,因为文件数据通常比较大,不适合放在 URL 中传输
—表单的 enctype 属性必须是 multipart/form-data
这个编码类型允许表单发送二进制数据,是文件上传所必需的
— 文件选择输入框的 type 必须是 file
需要使用专门的文件选择控件让用户选择要上传的文件。
二.文件的本地存储
1 | String originalFilename = file.getOriginalFilename();//拿到原始文件名 |
如何解决文件上传大小限制
在yml文件中配置文件上传大小限制(默认为1MB)
三.云存储OSS的应用
—准备工作:
创建存储桶,开通权限,创建密钥
cmd中配置accessKeyId和accessKeySecret
—参照官方的SDK来编写OSS的入门程序
引入官方要求的依赖,查看sdk说明文档(示例代码)
进行创建存储空间和上传文件的代码的编写
- 准备工作
配置阿里云OSS连接参数:Endpoint、AccessKey ID、AccessKey Secret
设置目标Bucket名称(bucketName)和上传路径(objectName)
创建OSS客户端实例 - 图片转换过程
1
2
3
4
5//从本地文件系统读取图片文件
File file = new File("C:\\Users\\zhr\\Pictures\\下载\\88619B415F37549A785112F1BAAF5FC6.jpg");
//将图片文件转换为字节数组
byte[] content = Files.readAllBytes(file.toPath()); - 上传操作
将字节数组包装为ByteArrayInputStream:1
2
3
4
5
6//将字节数组包装为ByteArrayInputStream:
new ByteArrayInputStream(content)
//创建PutObjectRequest对象,包含目标Bucket名称、文件路径和数据流
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content));
//执行上传操作
PutObjectResult result = ossClient.putObject(putObjectRequest);
Tlias案例中集成阿里云OSS
—引入阿里云工具类(由官方的示例代码改造而来)
—上传文件接口的开发
–代码优化
将灵活变动的参数配置在文件中
再通过@Value注解来注入外部配置的属性
当配置项较多时,@Value注解写起来较为繁琐
此时可使用自定义(对象存储服务)的Java类配合@ConfigurationProperties注解来完成属性的注入
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~