一、模块概述
作为项目组长,我主要负责了报修工单管理模块的后端业务接口开发。该模块是校园报修系统的核心功能之一,实现了从用户提交报修申请到维修人员处理完结的完整业务流程。
二、技术架构
2.1 整体架构设计
本项目采用经典的三层架构模式:
Controller层:负责接收HTTP请求,参数校验,调用Service层
Service层:负责业务逻辑处理
Mapper层:负责数据库CRUD操作
三层架构的优势:
- 职责分离:每层只关注自己的职责,降低耦合度
- 易于维护:修改某一层不影响其他层
- 便于测试:可以单独对每一层进行单元测试
- 代码复用:Service层的业务逻辑可以被多个Controller复用
2.2 技术栈
Spring Boot 2.x(Web框架)
MyBatis(持久层框架)
MySQL(数据库)
Lombok(简化实体类代码)
三、核心代码实现
3.1 模块功能说明
报修工单管理是系统的核心业务模块,实现了校园内设备报修的全流程管理,包括:
- 学生提交报修申请
- 管理员查看工单列表
- 维修人员接单处理
- 工单状态更新(待处理→处理中→已完成)
- 工单删除等
3.2 实体类设计
实体类是连接数据库表和Java程序的桥梁,它将数据库中的记录映射为Java对象,方便我们在代码中操作数据。
3.3 Mapper层实现
Mapper层(也叫DAO层)负责与数据库交互,将SQL查询结果映射为Java对象,或将Java对象持久化到数据库。
接口定义:
XML映射文件:
① 查询所有工单
说明:按创建时间倒序排列,最新的工单显示在最前面
②新增工单
<insert id="insert"parameterType="com.repair.entity.RepairOrder"useGeneratedKeys="true"keyProperty="id">INSERTINTOrepair_order(user_id,goods_id,title,content,repair_location,repairer_id,order_status,create_time,finish_time)VALUES(#{userId},#{goodsId},#{title},#{content},#{repairLocation},#{repairerId},#{orderStatus},#{createTime},#{finishTime})</insert>③动态更新工单
④删除工单
⑤ResultMap映射配置
说明:定义数据库字段与Java对象属性的映射关系,支持下划线转驼峰
3.4 Service层实现
Service层的作用:
- 处理业务逻辑(如:验证数据、计算、调用多个Mapper等)
- 事务管理(保证多个数据库操作的原子性)
- 作为Controller和Mapper之间的中间层,解耦表现层和数据层
接口定义:
实现类:
代码说明: - @Service 注解标识这是一个服务层Bean,交由Spring容器管理
- @Resource 注解注入Mapper接口的实现类
- Service层直接调用Mapper层方法,保持简洁,复杂业务逻辑可在此扩展
3.5 Controller层实现
Controller层的作用:
- 接收前端发送的HTTP请求
- 解析请求参数
- 调用Service层处理业务
- 返回统一的响应结果给前端
3.6 统一响应封装类
问题:
前端需要针对每个接口写不同的处理逻辑
无法统一处理错误
不利于维护和扩展
解决方案:
设计统一的响应结构
核心知识点讲解:
① RESTful API设计
- GET /order/list - 查询工单列表
- POST /order/add - 新增工单
- PUT /order/update
- 修改工单 DELETE /order/del/{id} - 删除工单
** 注解说明**
- @RestController = @Controller + @ResponseBody,返回JSON数据
- @RequestMapping(“/order”) 定义统一的URL前缀
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping 对应HTTP方法
- @RequestBody 接收JSON格式的请求体,自动反序列化为对象
- @PathVariable 从URL路径中提取参数
③ 统一响应封装 使用自定义的 Result 工具类统一返回格式:
- Result.success(data) - 成功响应
- Result.error(message) - 失败响应
四、核心业务逻辑详解
4.1 工单状态流转机制
工单状态包括:
待处理:用户提交后的初始状态
处理中:维修人员接单后
已完成:维修完成后设置finishTime
4.2 动态更新策略
在update方法中使用了MyBatis的动态SQL特性:
优势:只更新非空字段,支持多种场景复用同一接口:
- 用户修改报修信息
- 维修人员接单(设置repairerId和orderStatus)
- 维修完成(设置orderStatus和finishTime)
五、功能展示
功能1:用户初次登录系统,强制修改密码
功能2:查询所有工单![]()
功能3:新增报修工单![]()
响应:操作成功提示
功能4:修改工单状态(维修人员接单)
功能5:删除工单
点击“删除”按钮,弹出再次确认弹窗
响应:工单删除成功
功能6:管理员编辑删除物资
功能7:管理员审批物资
功能8:管理员管理人员
进行编辑人员角色,联系电话,账号状态等信息,重置密码,删除等操作
七、总结
通过报修工单模块的开发,我深入理解了Spring Boot + MyBatis技术栈的核心原理,掌握了RESTful API设计规范,学会了使用统一响应格式封装接口返回值。特别是在动态SQL、事务管理、依赖注入等方面有了深刻的实践经验。