news 2026/6/19 10:33:20

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

作者头像

张小明

前端开发工程师

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

一、模块职责介绍

本次实训我独立负责失物信息管理核心模块,是整个失物招领系统的核心业务模块。模块实现功能:失物信息发布、全量列表查询、物品找回状态修改、失物记录删除;配套图片上传存储,删除记录时同步清理服务器本地图片,避免磁盘冗余文件。下文完整拆解实体类、持久层、接口业务代码与业务逻辑。

二、数据库实体 LostItem.java

java

运行

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已找回 }
注解说明
  1. @TableName("lost_item"):绑定数据库对应数据表;
  2. @TableId(type = IdType.AUTO):设置主键自增;
  3. @Data:Lombok 注解,自动生成 get、set、toString 等方法,简化代码;
  4. status 状态字段区分物品找回状态,前端页面用不同标签样式展示。

三、持久层 Mapper LostItemMapper.java

java

运行

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 BaseMapper<LostItem> { // MyBatis-Plus内置基础CRUD方法:selectList、insert、updateById、deleteById,无需手写SQL }

继承 BaseMapper 后,框架自带全套单表操作方法,不用手动编写增删改查 SQL,大幅提升开发效率。

四、核心接口业务代码(Controller 写在启动类 DemoApplication)

java

运行

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 R<List<LostItem>> getLostList(){ List<LostItem> list = lostItemMapper.selectList(null); return R.success(list); } // 2. 新增发布失物(携带图片上传) @PostMapping("/api/lost/add") public R<String> 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 R<String> 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 R<String> 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 字段区分展示不同样式标签。

六、功能运行截图说明

  1. 前端发布失物页面截图:上传图片后提交表单,数据库新增一条失物记录;
  2. 状态修改功能截图:页面点击标记已找回按钮,接口返回成功,数据库 status 字段更新为 已找回;
  3. 删除功能截图:执行删除操作后,数据库无该条失物数据。

七、开发过程遇到的逻辑问题与解决方案

  1. 图片文件名重复覆盖:时间戳 + UUID 组合生成唯一文件名解决;
  2. 文件夹不存在导致上传报错:新增文件前判断并自动创建父目录;
  3. 删除图片路径字符串转换异常:统一路径存储规则,数据库存/uploads/xxx,本地文件路径去掉首斜杠。

八、个人开发心得

本模块开发核心难点是文件 IO 操作与数据库数据联动,不能只实现基础 CRUD 而忽略本地资源清理这类边界场景。MyBatis-Plus 大幅简化了单表数据库操作,让开发重心可以放在真实业务逻辑处理上,非常适合实训小型项目快速迭代开发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 10:17:20

吃ED药怕被发现的尴尬,2026年有了靠谱解法

【导语】买了一盒ED药&#xff0c;藏在抽屉最深处&#xff0c;每次吃之前先确认没人看见——这不是个别人的心理。根据WHO预测数据&#xff0c;全球ED患者数量已从1995年的1.52亿增长至2025年的约3.22亿。行业调研显示&#xff0c;隐私顾虑是影响ED患者就医和用药依从性的三大障…

作者头像 李华
网站建设 2026/6/19 10:05:08

PhotoGIMP终极指南:从Photoshop到GIMP的无缝迁移方案

PhotoGIMP终极指南&#xff1a;从Photoshop到GIMP的无缝迁移方案 【免费下载链接】PhotoGIMP A Patch for GIMP 3 for Photoshop Users 项目地址: https://gitcode.com/GitHub_Trending/ph/PhotoGIMP 你是否正在寻找Photoshop的免费替代品&#xff0c;却对GIMP的陌生界面…

作者头像 李华
网站建设 2026/6/19 9:55:47

《Python黑科技:深度逆向B站App推荐流,全协议模拟与高性能抓取实战》

1. 引言:为什么选择B站App推荐流? 在移动互联网时代,推荐系统是内容分发平台的“心脏”。B站(哔哩哔哩)作为中国最大的Z世代社区,其App推荐流算法融合了用户画像、内容热度、协同过滤等多重维度,极具研究价值。对于爬虫开发者而言,抓取App推荐流与抓取Web端有着天壤之…

作者头像 李华