学习进度条
今日所花时间:一小时
今日代码量:100行
博客量:一篇
了解到的知识点:
核心功能实现
1. 检测计划实体设计
@Entity
@Table(name = "detection_plan", indexes = {
@Index(name = "idx_device_type", columnList = "device_type"),
@Index(name = "idx_status", columnList = "status")
})
public class DetectionPlan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "plan_code", length = 64, nullable = false)
private String planCode;
@Column(name = "plan_name", length = 128, nullable = false)
private String planName;
@Column(name = "device_type", length = 32, nullable = false)
private String deviceType;
// 其他字段...
}
技术亮点:
- 使用JPA注解定义实体与表的映射关系
- 为常用查询字段添加索引优化查询性能
- 字段约束(length, nullable等)确保数据完整性
- 自动生成主键策略(IDENTITY)
2. 检测计划CRUD接口
分页查询接口
@GetMapping
public Result<PageBean<DetectionPlan>> getDetectionPlans(
@RequestParam Integer pageNum,
@RequestParam Integer pageSize,
@RequestParam(required = false) String deviceType,
@RequestParam(required = false) String planName,
@RequestParam(required = false) String status) {
PageBean<DetectionPlan> pageBean = detectionPlanMapper.getDetectionPlans(
pageNum, pageSize, deviceType, planName, status);
return Result.success(pageBean);
}
分页实现核心:
default PageBean<DetectionPlan> getDetectionPlans(...) {
PageBean<DetectionPlan> pb = new PageBean<>();
int offset = (pageNum - 1) * pageSize;
List<DetectionPlan> plans = selectByCondition(deviceType, planName, status, offset, pageSize);
pb.setItems(plans);
long total = countByCondition(deviceType, planName, status);
pb.setTotal(total);
return pb;
}
新增检测计划(带事务)
@PostMapping
@Transactional
public Result<DetectionPlan> addDetectionPlan(@RequestBody DetectionPlan detectionPlan) {
// 验证必要字段
if (detectionPlan.getPlanName() == null || detectionPlan.getDeviceType() == null) {
return Result.error("计划名称和设备类型不能为空");
}
int rowsInserted = detectionPlanMapper.insert(detectionPlan);
if (rowsInserted > 0) {
return Result.success(detectionPlan);
} else {
return Result.error("添加检测计划失败");
}
}
事务处理:
@Transactional注解确保操作原子性- 异常时自动回滚
- 方法级事务控制更精细
状态更新接口(PATCH方法)
@PatchMapping("/{id}/status")
@Transactional
public Result<String> updatePlanStatus(@PathVariable Long id, @RequestParam Integer status) {
DetectionPlan existingPlan = detectionPlanMapper.selectById(id.toString());
if (existingPlan == null) {
return Result.error("未找到对应的检测计划");
}
int rowsUpdated = detectionPlanMapper.updateStatus(id, status);
if (rowsUpdated > 0) {
return Result.success("更新计划状态成功");
} else {
return Result.error("更新计划状态失败");
}
}
RESTful设计:
- 使用PATCH方法进行局部更新
- 路径变量和请求参数结合使用
- 符合HTTP语义的状态管理
3. MyBatis高级应用
动态SQL构建
class DetectionPlanSqlProvider {
public String selectByCondition(...) {
return new SQL() {{
SELECT("*");
FROM("detection_plan");
if (deviceType != null && !deviceType.isEmpty()) {
WHERE("device_type LIKE CONCAT('%', #{deviceType}, '%')");
}
if (status != null && !status.isEmpty()) {
WHERE("status = #{status}");
}
ORDER_BY("id DESC");
}}.toString() + " LIMIT #{offset}, #{pageSize}";
}
}
优势:
- 条件动态拼接避免SQL注入
- 可读性强的链式调用
- 支持复杂查询场景
结果集映射
@Select("SELECT * FROM detection_plan WHERE plan_code = #{planCode}")
DetectionPlan selectByPlanCode(String planCode);
- 自动映射实体字段
- 支持自定义结果处理器
- 简化DAO层代码
关键技术点总结
-
JPA与MyBatis混合使用:
- JPA注解定义实体关系
- MyBatis处理复杂SQL
- 两者优势互补
-
分页查询优化:
- 物理分页(LIMIT)而非内存分页
- 总数与数据分离查询
- 动态条件支持
-
事务管理:
- 声明式事务简化代码
- 传播行为控制
- 隔离级别配置
-
RESTful API设计:
- 资源化URL设计
- 合理使用HTTP方法
- 状态码规范
-
参数校验:
- 业务逻辑校验
- 非空检查
- 状态合法性验证
性能优化实践
-
数据库索引优化:
@Table(indexes = { @Index(name = "idx_device_type", columnList = "device_type"), @Index(name = "idx_status", columnList = "status") })- 为查询条件字段添加索引
- 复合索引设计
- 索引选择性考虑
-
SQL优化:
- 避免SELECT *
- 使用LIMIT分页
- 条件查询走索引
-
事务粒度控制:
- 只对必要操作添加事务
- 短事务原则
- 读操作不加事务
学习收获
通过这个模块的开发,我深入理解了以下技术:
-
Spring事务管理机制:
- 声明式事务实现原理
- 事务传播行为
- 隔离级别应用场景
-
MyBatis高级特性:
- 动态SQL构建
- 结果集自动映射
- 注解与XML混合使用
-
REST API设计原则:
- 资源命名规范
- 状态码使用
- 版本控制策略
-
JPA实体映射:
- 关联关系配置
- 索引定义
- 字段约束
后续优化方向
-
缓存集成:
- 添加Redis缓存高频数据
- 缓存失效策略
- 多级缓存设计
-
API文档化:
- 集成Swagger
- 接口描述完善
- 示例值配置
-
性能监控:
- 添加SQL执行监控
- 慢查询分析
- 接口响应时间统计
-
安全增强:
- 接口权限控制
- 数据权限过滤
- 敏感字段加密
这个检测计划管理模块的开发,让我对Spring Boot在企业级应用中的使用有了更深入的理解,特别是在事务管理和复杂查询实现方面积累了宝贵经验。通过合理的架构设计和持续优化,系统在性能和可维护性上都达到了较高水平。

浙公网安备 33010602011771号