ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于SpringBoot的个人健康与运动习惯追踪系统设计与实现

基于SpringBoot的个人健康与运动习惯追踪系统设计与实现 温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义随着生活节奏的加快和工作压力的增大久坐、缺乏运动、作息不规律等不良生活习惯日益普遍亚健康状态成为现代人面临的突出问题。越来越多的人开始关注自身健康希望通过科学的手段记录和改善日常运动与生活习惯。然而传统的纸质记录或零散的手机备忘录难以系统化地追踪长期健康数据无法直观呈现趋势变化也难以给出有针对性的改进建议。个人健康与运动习惯追踪系统正是为解决上述痛点而设计。该系统以SpringBoot为后端框架结合前端页面为用户提供运动记录、健康数据管理、习惯打卡、趋势统计等功能。通过系统化的数据采集与可视化分析帮助用户清晰了解自身运动量、睡眠、体重等健康指标的变化趋势从而更科学地制定和调整健康计划逐步养成良好生活习惯提升整体健康水平。从技术层面看本系统的设计与实现也具有一定的工程实践意义。项目综合运用了SpringBoot、MyBatis-Plus、MySQL、Vue等主流技术栈涵盖RESTful API设计、数据持久化、前后端分离、权限校验等常见开发环节能够有效锻炼和检验开发者的全栈工程能力为同类健康管理类应用的开发提供可参考的实现方案。2. 系统技术栈本系统采用前后端分离的架构模式后端基于SpringBoot构建前端使用Vue框架数据库选用MySQL。整体技术选型兼顾了开发效率、系统稳定性和可扩展性。层次技术选型说明后端框架SpringBoot 2.7.x快速构建独立运行的Spring应用简化配置持久层框架MyBatis-Plus简化CRUD操作内置分页与条件构造器数据库MySQL 8.0存储用户、运动记录、健康指标等业务数据权限认证Spring Security JWT实现用户登录认证与接口访问控制前端框架Vue 3 Element Plus构建交互友好的管理界面与数据可视化页面数据可视化ECharts以折线图、柱状图等形式展示健康趋势构建工具Maven管理项目依赖与构建流程后端采用分层架构分为Controller、Service、Mapper三层职责清晰、便于维护。前端通过Axios调用后端RESTful接口实现数据的增删改查与图表渲染。3. 系统功能模块设计根据业务需求系统主要划分为用户管理、运动记录、健康指标、习惯打卡、数据统计五个核心模块。用户管理模块提供用户注册、登录、个人信息维护功能支持JWT令牌认证保障数据安全。运动记录模块用户可记录每日运动类型、时长、消耗热量等信息支持按日期查询和修改。健康指标模块记录体重、睡眠时长、心率、步数等健康数据形成连续的健康档案。习惯打卡模块支持用户自定义习惯项目如早睡、喝水、阅读每日打卡并统计连续打卡天数。数据统计模块通过ECharts以图表形式展示运动量、体重变化、睡眠趋势等辅助用户分析健康状态。系统整体业务流程为用户登录后进入首页可快速录入当日运动与健康数据查看历史记录与趋势图表并通过习惯打卡功能持续追踪日常行为形成完整的数据闭环。4. 数据库设计数据库设计是系统实现的基础。本系统核心数据表包括用户表、运动记录表、健康指标表、习惯打卡表。以下为各表的主要字段设计。4.1 用户表sys_user字段名类型说明idbigint主键自增usernamevarchar(50)用户名唯一passwordvarchar(100)加密后的密码nicknamevarchar(50)昵称gendertinyint性别0男1女heightdecimal(5,2)身高cmcreate_timedatetime创建时间4.2 运动记录表exercise_record字段名类型说明idbigint主键自增user_idbigint关联用户IDexercise_typevarchar(50)运动类型如跑步、游泳durationint运动时长分钟caloriesdecimal(8,2)消耗热量千卡exercise_datedate运动日期remarkvarchar(255)备注4.3 健康指标表health_metric字段名类型说明idbigint主键自增user_idbigint关联用户IDweightdecimal(5,2)体重kgsleep_durationdecimal(4,2)睡眠时长小时heart_rateint静息心率次/分stepsint当日步数record_datedate记录日期4.4 习惯打卡表habit_checkin字段名类型说明idbigint主键自增user_idbigint关联用户IDhabit_namevarchar(50)习惯名称如早睡checkin_datedate打卡日期statustinyint完成状态0未完成1完成5. 核心代码实现本节选取系统中最具代表性的核心代码进行说明包括实体类、Mapper层、Service层、Controller层以及前端调用示例。5.1 实体类定义以运动记录实体为例使用MyBatis-Plus注解简化映射配置。import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; Data TableName(exercise_record) public class ExerciseRecord { TableId(type IdType.AUTO) private Long id; private Long userId; private String exerciseType; private Integer duration; private BigDecimal calories; private LocalDate exerciseDate; private String remark; }5.2 Mapper层继承BaseMapper即可获得基础CRUD能力同时自定义统计查询方法。import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; Mapper public interface ExerciseRecordMapper extends BaseMapperExerciseRecord { Select(SELECT exercise_type AS type, SUM(duration) AS totalDuration FROM exercise_record WHERE user_id #{userId} GROUP BY exercise_type) ListMapString, Object selectTypeSummary(Long userId); }5.3 Service层Service层封装业务逻辑例如新增运动记录时自动计算消耗热量并校验数据合法性。import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; Service public class ExerciseRecordServiceImpl extends ServiceImplExerciseRecordMapper, ExerciseRecord implements ExerciseRecordService { Resource private ExerciseRecordMapper exerciseRecordMapper; Override public boolean addRecord(ExerciseRecord record) { if (record.getDuration() null || record.getDuration() 0) { throw new RuntimeException(运动时长必须大于0); } // 简化热量计算按运动类型估算实际可按MET值精确计算 if (record.getCalories() null) { BigDecimal calories BigDecimal.valueOf(record.getDuration() * 6.0); record.setCalories(calories); } return save(record); } Override public ListMapString, Object getTypeSummary(Long userId) { return exerciseRecordMapper.selectTypeSummary(userId); } }5.4 Controller层Controller层提供RESTful接口统一返回结果封装对象Result。import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import java.util.Map; RestController RequestMapping(/api/exercise) public class ExerciseRecordController { Resource private ExerciseRecordService exerciseRecordService; PostMapping(/add) public ResultBoolean add(RequestBody ExerciseRecord record) { return Result.success(exerciseRecordService.addRecord(record)); } GetMapping(/list) public ResultListExerciseRecord list(RequestParam Long userId, RequestParam(required false) String date) { return Result.success(exerciseRecordService.listByUserAndDate(userId, date)); } GetMapping(/summary) public ResultListMapString, Object summary(RequestParam Long userId) { return Result.success(exerciseRecordService.getTypeSummary(userId)); } }5.5 统一返回结果封装import lombok.Data; Data public class ResultT { private Integer code; private String message; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.setCode(200); result.setMessage(操作成功); result.setData(data); return result; } public static T ResultT error(String message) { ResultT result new Result(); result.setCode(500); result.setMessage(message); return result; } }5.6 前端调用示例前端使用Axios调用后端接口实现运动记录的提交与查询。import request from /utils/request // 新增运动记录 export function addExercise(data) { return request({ url: /api/exercise/add, method: post, data }) } // 查询运动记录列表 export function getExerciseList(userId, date) { return request({ url: /api/exercise/list, method: get, params: { userId, date } }) } // 获取运动类型汇总 export function getExerciseSummary(userId) { return request({ url: /api/exercise/summary, method: get, params: { userId } }) }6. 系统测试与总结系统开发完成后对核心功能进行了功能测试与接口测试。测试结果表明用户注册登录、运动记录增删改查、健康指标录入、习惯打卡以及数据统计等模块均能正常运行接口响应稳定数据读写准确达到了预期的设计目标。本系统基于SpringBoot实现了个人健康与运动习惯追踪的核心功能具备良好的扩展性。后续可从以下方向继续优化一是引入更精确的热量消耗计算模型结合用户身高体重和运动强度动态估算二是增加健康建议与异常提醒功能根据数据趋势自动生成个性化建议三是支持多设备数据同步对接智能手环等可穿戴设备进一步提升数据采集的便捷性与完整性。
返回列表