
1. 项目概述这个智慧旅游系统是一个典型的Java Web全栈项目采用SpringBootVue的前后端分离架构。作为课程设计或毕业设计选题它完美涵盖了现代Web开发的三大核心要素后端业务逻辑处理SpringBoot、前端交互实现Vue以及数据库设计MySQL。我在实际开发中发现这类系统特别适合作为学生向企业展示全栈能力的作品集项目。系统核心功能模块包括旅游景点管理、线路规划、用户评价、订单管理等。其中景点智能推荐模块通过分析用户历史行为数据采用基于内容的推荐算法实现个性化推荐这是体现智慧特性的关键设计点。我在实现这个功能时发现Spring Data JPA与Vue的axios配合能极大简化前后端数据交互的复杂度。2. 技术栈选型解析2.1 SpringBoot后端框架选择SpringBoot 2.7.x版本兼容JDK8而非最新的3.x系列主要考虑教学环境的普适性。实际开发中我通过spring-boot-starter-web快速构建RESTful API用spring-boot-starter-data-jpa实现ORM映射。特别要注意的是在application.yml中需要正确配置数据库连接池参数spring: datasource: url: jdbc:mysql://localhost:3306/tourism_db?useSSLfalseserverTimezoneUTC username: root password: 123456 hikari: maximum-pool-size: 20 minimum-idle: 5经验提示开发阶段建议开启JPA的SQL日志打印便于调试spring.jpa.show-sqltrue2.2 Vue前端框架采用Vue 2.x Element UI组合相比Vue 3.x更稳定且生态成熟。通过vue-cli脚手架初始化项目时我推荐选择babel、router、vuex这三个核心插件。路由配置示例const routes [ { path: /scenic-spots, component: () import(/views/ScenicSpotList), meta: { title: 景点列表 } } ]2.3 数据库设计MySQL 5.7作为关系型数据库主要表包括用户表(user)id, username, password(需加密), phone景点表(scenic_spot)id, name, description, location(经纬度)订单表(order)id, user_id, spot_id, create_time我建议使用Flyway进行数据库版本管理避免手动执行SQL脚本。在resources/db/migration目录下创建V1__Init_db.sql文件初始化表结构。3. 核心功能实现3.1 景点智能推荐模块采用混合推荐算法基于内容的推荐分析景点标签相似度协同过滤根据用户行为相似度推荐SpringBoot服务层关键代码public ListScenicSpot recommendSpots(Long userId) { // 获取用户历史行为 ListUserBehavior behaviors behaviorRepo.findByUserId(userId); // 计算推荐权重 MapLong, Double spotScores new HashMap(); behaviors.forEach(behavior - { ListTagSimilarity similarities tagService.findSimilarSpots(behavior.getSpotId()); similarities.forEach(sim - { spotScores.merge(sim.getSpotId(), sim.getScore() * behavior.getWeight(), Double::sum); }); }); // 返回TOP10推荐 return spotScores.entrySet().stream() .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .limit(10) .map(entry - spotRepo.findById(entry.getKey()).orElse(null)) .filter(Objects::nonNull) .collect(Collectors.toList()); }3.2 旅游路线规划基于Dijkstra算法实现最短路径规划前端通过腾讯地图JavaScript API展示// Vue组件中初始化地图 initMap() { this.map new qq.maps.Map(this.$refs.mapContainer, { center: new qq.maps.LatLng(39.916527, 116.397128), zoom: 12 }); // 添加路线绘制逻辑 this.drawRoute(spots); }4. 开发调试技巧4.1 前后端联调使用Postman测试API接口时注意添加Content-Type: application/json认证接口需要先在Header中添加AuthorizationVue开发中配置代理解决跨域// vue.config.js module.exports { devServer: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } } }4.2 性能优化实践数据库层面为高频查询字段添加索引使用Cacheable注解实现缓存前端优化路由懒加载使用keep-alive缓存组件5. 文档编写要点毕业设计文档建议包含以下核心章节需求分析用例图、功能清单系统设计架构图、ER图关键技术算法流程图测试方案测试用例表我特别建议使用PlantUML绘制架构图代码与文档同步更新。例如系统架构图startuml component Vue前端 as front component SpringBoot服务 as backend database MySQL as db front - backend : REST API backend - db : JDBC enduml6. 部署上线方案6.1 开发环境IDEA Vue DevTools插件Lombok插件必装简化POJO6.2 生产部署推荐Docker compose方案version: 3 services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 backend: build: ./backend ports: - 8080:8080 frontend: build: ./frontend ports: - 80:807. 常见问题解决Vue报错Failed to resolve component:检查组件导入路径是否正确确保在components中注册了组件JPA更新操作不生效确认方法添加了Transactional检查实体类是否有DynamicUpdate地图API加载失败确认腾讯地图key正确配置检查网络是否正常访问腾讯服务我在实际开发中发现系统最耗时的部分是推荐算法调优。建议先用Mock数据验证算法逻辑再接入真实数据库。对于地理位置计算使用MySQL的空间函数ST_Distance_Sphere会比应用层计算效率更高。