1. 项目概述
校园健康驿站管理系统是一个典型的现代化Web应用,采用前后端分离架构设计。这个系统主要面向高校场景,用于管理学生健康档案、预约挂号、药品库存等核心业务。我最近完整开发并部署了这套系统,现在把整个技术实现过程分享给大家。
这套系统前端采用Vue.js框架,后端基于SpringBoot构建,数据持久层使用MyBatis操作MySQL数据库。这种技术组合在当前企业级应用开发中非常流行,既能保证开发效率,又能确保系统性能。下面我会从技术选型、核心功能实现到部署上线的完整流程,逐一详细说明。
2. 技术栈选型分析
2.1 后端技术选择
SpringBoot作为后端框架有几个明显优势:
- 自动配置简化了Spring应用的初始搭建
- 内嵌Tomcat服务器,无需单独部署
- 丰富的starter依赖,快速集成各种组件
- 完善的监控机制,便于后期运维
我选择2.7.12版本,这是目前比较稳定的release版本。在pom.xml中主要依赖包括:
- spring-boot-starter-web
- spring-boot-starter-test
- mybatis-spring-boot-starter
- mysql-connector-java
2.2 前端技术架构
Vue 3.x版本相比2.x有显著性能提升:
- Composition API更灵活的组织代码
- 更小的打包体积
- 更好的TypeScript支持
前端工程使用Vue CLI创建,主要依赖包括:
- vue-router 4.x 处理路由
- axios 处理HTTP请求
- element-plus UI组件库
- vuex 状态管理
2.3 数据库设计
MySQL选用8.0版本,主要考虑:
- 完善的JSON支持
- 窗口函数等高级特性
- 更好的性能优化
核心表设计:
sql复制CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`student_id` varchar(20) NOT NULL,
`name` varchar(50) NOT NULL,
`college` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 核心功能实现
3.1 学生健康档案管理
后端Controller示例:
java复制@RestController
@RequestMapping("/api/health")
public class HealthController {
@Autowired
private HealthService healthService;
@GetMapping("/records/{studentId}")
public ResponseEntity<List<HealthRecord>> getRecords(
@PathVariable String studentId) {
return ResponseEntity.ok(healthService.getRecords(studentId));
}
}
前端调用示例:
javascript复制async fetchHealthRecords() {
try {
const res = await axios.get(`/api/health/records/${this.studentId}`)
this.records = res.data
} catch (error) {
console.error('获取健康记录失败:', error)
}
}
3.2 预约挂号系统
关键业务逻辑:
- 校验预约时间是否冲突
- 检查医生排班情况
- 生成预约编号
- 发送通知消息
使用MyBatis动态SQL处理复杂查询:
xml复制<select id="findAvailableSlots" resultType="TimeSlot">
SELECT * FROM time_slot
WHERE doctor_id = #{doctorId}
AND date = #{date}
AND status = 'AVAILABLE'
<if test="deptId != null">
AND dept_id = #{deptId}
</if>
ORDER BY start_time
</select>
4. 前后端交互设计
4.1 API规范
采用RESTful风格设计,主要规则:
- GET /resources 获取列表
- GET /resources/{id} 获取单个
- POST /resources 创建
- PUT /resources/{id} 更新
- DELETE /resources/{id} 删除
统一响应格式:
json复制{
"code": 200,
"message": "success",
"data": {}
}
4.2 跨域解决方案
SpringBoot配置CORS:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.maxAge(3600);
}
}
5. 系统部署实践
5.1 后端部署
打包命令:
bash复制mvn clean package -DskipTests
Dockerfile示例:
dockerfile复制FROM openjdk:11-jre
COPY target/health-system.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
5.2 前端部署
构建生产环境代码:
bash复制npm run build
Nginx配置示例:
nginx复制server {
listen 80;
server_name health.example.com;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://backend:8080;
}
}
6. 常见问题解决
6.1 数据库连接问题
典型错误:
code复制Communications link failure
解决方案:
- 检查MySQL服务是否运行
- 验证连接字符串
- 检查防火墙设置
- 确认用户权限
6.2 跨域问题
常见现象:
code复制Access-Control-Allow-Origin header missing
解决方法:
- 确保后端正确配置CORS
- 开发环境可配置代理
- 生产环境通过Nginx转发
7. 性能优化建议
7.1 数据库优化
- 为常用查询字段添加索引
- 合理设计表关系
- 避免SELECT * 查询
- 使用连接池管理连接
7.2 前端优化
- 组件懒加载
- 路由按需加载
- 合理使用keep-alive
- 图片等静态资源压缩
8. 安全注意事项
8.1 接口安全
- 所有API添加JWT认证
- 敏感操作记录日志
- 输入参数严格校验
- 使用HTTPS加密传输
8.2 数据安全
- 密码等敏感信息加密存储
- 定期备份数据库
- 实施最小权限原则
- 关键操作添加二次确认
9. 扩展功能思路
- 接入微信小程序端
- 添加健康数据分析模块
- 实现药品库存预警
- 开发数据可视化看板
这套系统在实际部署运行后表现稳定,日均处理上千条健康记录。开发过程中最大的收获是深入理解了前后端分离架构下各组件如何协同工作。特别是在处理跨域问题和接口联调时积累了不少实战经验。
