学习进度条
今日学习时间:1小时
今日代码量:100行
今日博客:1篇
核心功能实现
1. 维修工单管理
维修工单实体设计
@Data
public class RepairManager {
private String planId; // 工单编号
private String name; // 设备名称
private String code; // 设备编号
private String faultCode; // 故障编号
private String faultType; // 故障类型
private String description; // 故障描述
private Integer status; // 状态(0-待处理,1-处理中,2-已完成,3-已关闭)
private String image; // 故障图片
// 其他字段...
}
工单提交接口
@PostMapping("/submit")
public Map<String, Object> submitRepair(@RequestBody Map<String, Object> repairData) {
RepairManager repairManager = new RepairManager();
// 设置前端传过来的字段
repairManager.setName((String) repairData.get("deviceName"));
repairManager.setCode((String) repairData.get("deviceCode"));
// 设置默认状态为待处理
repairManager.setStatus(0);
int result = repairManagerMapper.insertRepair(repairManager);
if (result > 0) {
return Map.of("success", true, "message", "报修提交成功");
} else {
return Map.of("success", false, "message", "报修提交失败");
}
}
技术亮点:
- 使用
@RequestBody接收JSON格式请求数据 - 灵活处理前端传入的动态字段
- 明确的业务状态管理
分页查询实现
@GetMapping
public Result<PageBean<RepairManager>> getRepairList(
@RequestParam Integer pageNum,
@RequestParam Integer pageSize,
@RequestParam(required = false) String deviceType,
@RequestParam(required = false) String deviceName,
@RequestParam(required = false) String status) {
PageBean<RepairManager> pb = repairManagerMapper.list(
pageNum, pageSize, deviceType, deviceName, status);
return Result.success(pb);
}
分页核心逻辑:
default PageBean<RepairManager> list(Integer pageNum, Integer pageSize,
String deviceType, String deviceName, String status) {
PageBean<RepairManager> pb = new PageBean<>();
int offset = (pageNum - 1) * pageSize;
// 查询当前页数据
List<RepairManager> items = selectByCondition(deviceType, deviceName, status, offset, pageSize);
pb.setItems(items);
// 查询总数
long total = countByCondition(deviceType, deviceName, status);
pb.setTotal(total);
return pb;
}
2. 文件上传功能
文件上传接口
@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws Exception {
String originalFilename = file.getOriginalFilename();
// 生成唯一文件名
String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
// 上传到阿里云OSS
String url = AliOssUtils.uploadFile(filename, file.getInputStream());
return Result.success(url);
}
技术要点:
MultipartFile处理文件上传- UUID生成唯一文件名防止冲突
- 阿里云OSS SDK实现云端存储
- 返回文件访问URL
阿里云OSS工具类
public class AliOssUtils {
private static String endpoint = "your-oss-endpoint";
private static String accessKeyId = "your-access-key";
private static String accessKeySecret = "your-secret-key";
private static String bucketName = "your-bucket-name";
public static String uploadFile(String objectName, InputStream inputStream) {
// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 上传文件
ossClient.putObject(bucketName, objectName, inputStream);
// 生成访问URL
return "https://" + bucketName + "." + endpoint + "/" + objectName;
} finally {
ossClient.shutdown();
}
}
}
3. MyBatis动态SQL应用
SQL提供类实现复杂查询
class RepairManagerSqlProvider {
public String selectByCondition(...) {
return new SQL() {{
SELECT("planId, name, code, fault_code as faultCode...");
FROM("repairmanager");
if (deviceType != null) {
WHERE("type LIKE CONCAT('%', #{deviceType}, '%')");
}
if (status != null) {
WHERE("status = #{status}");
}
ORDER_BY("create_time DESC");
}}.toString() + " LIMIT #{offset}, #{pageSize}";
}
}
优势:
- 动态生成SQL语句
- 避免SQL注入风险
- 灵活的查询条件组合
关键技术点总结
-
RESTful API设计:
- 合理使用HTTP方法(POST/PUT/GET/DELETE)
- 规范的URL命名(/api/repair)
- 一致的响应格式(Result
)
-
分页查询优化:
- 计算总数和分页数据分离
- 使用LIMIT实现物理分页
- 支持多条件筛选
-
文件上传方案:
- 本地存储与云存储结合
- 文件名唯一性处理
- 大文件上传优化(分片上传)
-
状态管理:
- 明确的工单状态流转(0-待处理→1-处理中→2-已完成)
- 状态字段的规范化设计
-
异常处理:
- 统一的错误响应格式
- 详细的错误信息提示
- 事务管理关键操作
学习收获
通过这个模块的开发,我深入掌握了以下技术:
-
Spring MVC文件处理机制:
- MultipartFile接口的使用
- 文件上传大小配置
- 文件类型校验
-
云存储集成:
- 阿里云OSS SDK的使用
- 访问权限控制
- 文件URL生成策略
-
复杂查询实现:
- MyBatis动态SQL构建
- 分页查询性能优化
- 多表关联查询技巧
-
API设计原则:
- RESTful最佳实践
- 版本控制考虑
- 文档化(Swagger集成)
性能优化建议
-
分页查询:
- 添加合适索引提高查询效率
- 考虑使用PageHelper等成熟分页插件
-
文件上传:
- 实现断点续传功能
- 添加文件MD5校验
- 限制上传文件类型和大小
-
缓存策略:
- 高频访问数据加入Redis缓存
- 合理设置缓存过期时间
这个维修管理模块的开发,让我对Spring Boot在企业级应用中的使用有了更深入的理解,特别是在文件处理和复杂业务逻辑实现方面积累了宝贵经验。

浙公网安备 33010602011771号