实训后端模块|失物信息管理完整代码实现(MyBatis-Plus 增删改查 + 图片上传删除联动)

发布时间:2026/6/19 10:33:21

实训后端模块|失物信息管理完整代码实现(MyBatis-Plus 增删改查 + 图片上传删除联动) 一、模块职责介绍本次实训我独立负责失物信息管理核心模块是整个失物招领系统的核心业务模块。模块实现功能失物信息发布、全量列表查询、物品找回状态修改、失物记录删除配套图片上传存储删除记录时同步清理服务器本地图片避免磁盘冗余文件。下文完整拆解实体类、持久层、接口业务代码与业务逻辑。二、数据库实体 LostItem.javajava运行package com.hlw.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDate; Data TableName(lost_item) public class LostItem { TableId(type IdType.AUTO) private Integer id; // 主键ID自增 private String itemName; // 丢失物品名称 private String location; // 丢失地点 private LocalDate lostDate; // 丢失日期 private String desc; // 物品详细描述 private String imgUrl; // 上传图片访问路径 private Integer status; // 状态0未找回 1已找回 }注解说明TableName(lost_item)绑定数据库对应数据表TableId(type IdType.AUTO)设置主键自增DataLombok 注解自动生成 get、set、toString 等方法简化代码status 状态字段区分物品找回状态前端页面用不同标签样式展示。三、持久层 Mapper LostItemMapper.javajava运行package com.hlw.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.hlw.entity.LostItem; import org.apache.ibatis.annotations.Mapper; Mapper public interface LostItemMapper extends BaseMapperLostItem { // MyBatis-Plus内置基础CRUD方法selectList、insert、updateById、deleteById无需手写SQL }继承 BaseMapper 后框架自带全套单表操作方法不用手动编写增删改查 SQL大幅提升开发效率。四、核心接口业务代码Controller 写在启动类 DemoApplicationjava运行import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID; // 1. 查询全部失物列表 GetMapping(/api/lost/list) public RListLostItem getLostList(){ ListLostItem list lostItemMapper.selectList(null); return R.success(list); } // 2. 新增发布失物携带图片上传 PostMapping(/api/lost/add) public RString addLostItem(LostItem lostItem, RequestParam(file) MultipartFile file) throws IOException { // 1. 生成全局唯一图片文件名防止多人上传同名图片覆盖 String suffix file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(.)); String fileName System.currentTimeMillis() UUID.randomUUID().toString() suffix; // 2. 判断uploads文件夹是否存在不存在自动创建目录 File saveFile new File(uploads/ fileName); if(!saveFile.getParentFile().exists()){ saveFile.getParentFile().mkdirs(); } // 3. 将图片写入本地文件夹 file.transferTo(saveFile); // 4. 存入图片访问路径默认状态为未找回 lostItem.setImgUrl(/uploads/ fileName); lostItem.setStatus(0); lostItemMapper.insert(lostItem); return R.success(发布失物成功); } // 3. 修改失物找回状态 PutMapping(/api/lost/update/status/{id}) public RString updateLostStatus(PathVariable Integer id){ LostItem item lostItemMapper.selectById(id); item.setStatus(1); lostItemMapper.updateById(item); return R.success(状态更新为已找回); } // 4. 删除失物记录同步删除本地存储图片 DeleteMapping(/api/lost/del/{id}) public RString delLostItem(PathVariable Integer id){ LostItem lostItem lostItemMapper.selectById(id); // 转换图片路径删除本地物理文件 String imgPath lostItem.getImgUrl().replace(/uploads/,uploads/); File imgFile new File(imgPath); if(imgFile.exists()){ imgFile.delete(); } // 删除数据库记录 lostItemMapper.deleteById(id); return R.success(删除成功); }五、核心业务逻辑分步讲解1. 新增失物图片处理逻辑使用「时间戳 UUID」拼接图片文件名从根源解决图片重名覆盖问题写入文件前自动判断 uploads 目录是否存在缺失则自动创建避免文件写入报错数据库仅存储图片访问路径前端通过/uploads/文件名直接回显图片不占用数据库存储空间。2. 删除联动清理逻辑单纯删除数据库记录会造成服务器本地大量无效图片堆积因此业务流程强制要求先根据 ID 查询图片路径物理删除本地图片文件再执行数据库记录删除操作保证资源同步清理。3. 物品状态流转逻辑用户发布失物时默认状态为 0未找回当用户找回物品后调用状态更新接口修改为 1已找回前端列表页面通过 status 字段区分展示不同样式标签。六、功能运行截图说明前端发布失物页面截图上传图片后提交表单数据库新增一条失物记录状态修改功能截图页面点击标记已找回按钮接口返回成功数据库 status 字段更新为 已找回删除功能截图执行删除操作后数据库无该条失物数据。七、开发过程遇到的逻辑问题与解决方案图片文件名重复覆盖时间戳 UUID 组合生成唯一文件名解决文件夹不存在导致上传报错新增文件前判断并自动创建父目录删除图片路径字符串转换异常统一路径存储规则数据库存/uploads/xxx本地文件路径去掉首斜杠。八、个人开发心得本模块开发核心难点是文件 IO 操作与数据库数据联动不能只实现基础 CRUD 而忽略本地资源清理这类边界场景。MyBatis-Plus 大幅简化了单表数据库操作让开发重心可以放在真实业务逻辑处理上非常适合实训小型项目快速迭代开发。

相关新闻