1. 项目概述
这个毕业设计项目是一个基于SpringBoot+Vue技术栈的个人健康管理小程序,采用前后端分离架构实现。作为一名长期从事企业级应用开发的工程师,我认为这种技术组合在当前中小型Web应用中具有典型代表性。SpringBoot提供了快速构建后端服务的脚手架,Vue则以其轻量化和渐进式特点成为前端开发的主流选择。
系统核心功能围绕个人健康数据管理展开,包括运动记录、饮食追踪、睡眠监测等模块。后端采用SpringBoot 2.7.x版本,整合MyBatis-Plus进行数据库操作,前端使用Vue 3组合式API开发微信小程序界面。数据库选用MySQL 8.0,这是一个经过大量生产验证的稳定选择。
提示:选择SpringBoot 2.7.x而非最新3.x版本是考虑到毕业设计场景下第三方库的兼容性更成熟,避免踩坑。
2. 技术架构解析
2.1 后端技术栈设计
SpringBoot作为后端核心框架,其自动配置特性大幅减少了XML配置工作量。我特别推荐使用SpringBoot Starter机制来管理依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
数据库访问层采用MyBatis-Plus而非原生MyBatis,主要考虑其强大的CRUD封装和条件构造器,可以节省大量模板代码。例如统计用户每日步数:
java复制// MyBatis-Plus条件查询示例
LambdaQueryWrapper<StepRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StepRecord::getUserId, userId)
.between(StepRecord::getRecordDate, startDate, endDate);
return stepRecordMapper.selectList(wrapper);
2.2 前端技术选型
前端采用Vue 3 + Vant Weapp组件库的组合。Vue 3的Composition API相比Options API更适合复杂业务逻辑组织。微信小程序端通过uni-app框架实现跨平台兼容:
javascript复制// Vue 3组合式API示例
const stepData = ref([])
const fetchStepData = async () => {
const res = await axios.get('/api/steps', {
params: { userId: store.state.userId }
})
stepData.value = res.data
}
3. 核心功能实现
3.1 健康数据采集模块
设计采用了多源数据采集策略:
- 手动录入:提供表单供用户输入体重、血压等数据
- 设备同步:通过蓝牙API连接智能手环获取运动数据
- 第三方接入:微信运动步数授权获取
数据表设计遵循第三范式,核心表包括:
sql复制CREATE TABLE `health_record` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`record_type` ENUM('STEP','SLEEP','WEIGHT') NOT NULL,
`record_value` DECIMAL(10,2) NOT NULL,
`record_time` DATETIME NOT NULL,
INDEX `idx_user_type` (`user_id`, `record_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 数据可视化呈现
使用ECharts实现健康数据趋势图,关键配置项:
javascript复制option = {
xAxis: { type: 'category', data: dates },
yAxis: { type: 'value' },
series: [{
data: steps,
type: 'line',
smooth: true,
areaStyle: {}
}]
}
4. 开发环境搭建
4.1 后端环境配置
- JDK 11环境安装
- IDEA中创建SpringBoot项目
- 配置MySQL连接池:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/health_db?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
4.2 前端开发准备
- 安装Node.js 16.x
- 全局安装Vue CLI:
bash复制npm install -g @vue/cli
- 创建uni-app项目:
bash复制vue create -p dcloudio/uni-preset-vue health-app
5. 典型问题解决方案
5.1 跨域问题处理
后端增加CORS配置类:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST");
}
}
5.2 微信小程序登录流程
- 前端调用wx.login获取code
- 将code发送到后端换取openid
- 后端生成JWT令牌返回前端
- 前端存储token用于后续请求
6. 项目部署实践
6.1 后端打包与运行
使用Maven打包SpringBoot应用:
bash复制mvn clean package -DskipTests
java -jar target/health-management-0.0.1-SNAPSHOT.jar
6.2 小程序发布流程
- 在微信公众平台申请小程序账号
- 配置合法域名(需备案)
- 使用HBuilderX进行打包
- 提交微信审核
7. 扩展功能建议
- 健康风险评估算法:基于用户数据计算健康指数
- 智能提醒:根据历史数据预测最佳作息时间
- 社交功能:添加好友进行健康数据PK
我在实际开发中发现,使用MyBatis-Plus的自动填充功能可以大幅简化创建时间、更新时间等通用字段处理。通过在实体类添加注解:
java复制@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
配合自定义元对象处理器,这些字段会自动填充而不需要手动设置。这个小技巧帮我节省了至少30%的重复代码量。
