ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SpringBoot+Vue+微信小程序游戏攻略分享系统毕设开发全攻略

SpringBoot+Vue+微信小程序游戏攻略分享系统毕设开发全攻略 简介本资源是一套高分毕业设计级的游戏攻略分享微信小程序完整实现方案面向计算机专业本科生、毕设与课程设计学习者解决游戏资讯高效共享与跨端交互的实际需求。项目采用JavaSpringBoot构建后端服务Vue开发管理后台微信小程序承载用户端MySQL实现数据持久化技术栈覆盖前后端分离、RESTful API设计、用户鉴权及动态内容渲染等核心能力。压缩包共1112个文件34.71MB含82个Java业务逻辑文件、220个JS交互脚本、110个Vue组件、440张PNG图标与截图、44个WXSS样式文件及38个WXML页面结构文件辅以SQL建库脚本、IDEA工程配置与Navicat数据库工具支持目录结构清晰模块划分明确。项目已通过导师验收并实测可运行提供开箱即用的完整环境涵盖用户发布/搜索攻略、分类浏览、点赞评论、后台审核等全链路功能是深入理解小程序生态与SpringBoot-Vue协同开发的优质实践范例。 毕业设计做“游戏攻略分享微信小程序”这件事我太有发言权了。这几年带过的学生里选这个题目的不在少数原因也很直接技术栈主流、前后端分离结构清晰、微信小程序又是当下最常见的C端形态拿来做毕设答辩评委老师一看就知道你完整走了一遍“需求分析→数据库设计→后端接口→管理后台→小程序端”的全流程。你手里这个标题——JAVASpringBootVueMySQL微信小程序——基本就是这类项目的标准答案组合。这篇博文我就按这套技术栈把一个游戏攻略分享小程序从0到1拆开讲一遍包括项目结构怎么搭、数据库怎么设计、接口怎么写、小程序端怎么调以及最常见的坑和排查思路。1. 内容整体设计与思路拆解1.1 这个项目到底要解决什么问题游戏攻略分享小程序表面上看就是“用户发攻略、别人看攻略”但往深了想一个能拿高分的毕设项目绝不只是增删改查那么简单。它需要覆盖完整的业务闭环用户登录、攻略浏览、攻略发布、分类筛选、收藏点赞、个人中心、后台管理每一环都要有对应的数据表和接口支持。这也是为什么这类项目在毕设选题里长盛不衰——它麻雀虽小但五脏俱全。从技术角度看这套组合的选型很成熟SpringBoot负责后端接口Vue搭建PC端管理后台微信小程序作为用户端MySQL存数据。三个端各司其职恰好对应了当前主流互联网项目的真实结构。你答辩的时候可以理直气壮地说这不是一个demo而是一个具备上线雏形的完整系统。1.2 为什么选这套技术栈而不是别的很多同学纠结过要不要换技术栈比如用Python的Flask/Django或者Node.js。我的建议是除非你已经有十足把握否则不要轻易换。SpringBoot Vue MySQL 小程序的组合最大的优势是学习资料极其丰富、社区成熟、问题几乎都能搜到。你去某度搜“SpringBoot微信小程序”能搜出来一片教程搜“Flask微信小程序”参考资料就少了一大截。毕设时间紧张没必要在冷门方向死磕。具体到每个环节SpringBoot目前Java后端的事实标准内置Tomcat简化配置写好Controller就能直接跑非常适合快速开发。Vue前端框架里国内使用率最高的之一配合Element-UI能快速搭出管理后台界面比JSP时代不知道爽多少倍。MySQL最普及的关系型数据库教学资源多可视化工具齐全5.7或8.0版本都行。微信小程序天然的用户端形态微信自带登录授权、真机预览、云开发能力毕设演示直接在手机上跑效果比网页端好得多。有人可能问为什么不用SpringCloud微服务答案是毕设项目不需要单体应用足够搞微服务反而增加部署复杂度答辩时还可能被问住。技术选型要匹配项目复杂度这是很关键的设计智慧。1.3 整体架构与模块划分我习惯把整个系统分成三个区域小程序端用户面向、管理后台管理员面向、后端服务数据与逻辑中心。小程序端负责用户注册登录、首页攻略列表、攻略详情含图文内容、分类筛选、搜索、收藏点赞、个人中心我的发布、我的收藏、意见反馈。管理后台负责用户管理禁用/启用、查看详情、攻略审核发布审核、下架违规内容、分类管理、公告管理、数据概览用户数、攻略数、评论数。后端服务提供鉴权接口、攻略增删改查接口、收藏点赞接口、分类接口、评论接口。这里要特别强调接口统一返回格式我一般用Result { code, msg, data }三层结构code为200表示成功401表示未登录500表示服务器异常。所有接口都走这个结构小程序端解析就非常方便。2. 核心细节解析与实操要点2.1 数据库设计——整个系统的地基数据库设计直接决定后续开发的顺畅程度。我见过太多学生一上来就写代码写到一半发现字段不够用、表结构不合理又翻回来改非常浪费时间。第一步一定是先画ER图、列字段把表定下来。以这个游戏攻略分享项目为例核心表至少要有这几张表名说明关键字段user用户表id, openid(微信唯一标识), nickname, avatar, role(普通用户/管理员), status(正常/禁用), create_timecategory攻略分类表id, name, sort, create_timearticle攻略文章表id, user_id, category_id, title, cover_image, content, status(待审核/已发布/已下架), view_count, like_count, favorite_count, create_timecomment评论表id, article_id, user_id, content, create_timefavorite收藏表id, user_id, article_id, create_timelike_record点赞表id, user_id, article_id, create_timebanner轮播图表id, image_url, link_url, sort, statusnotice公告表id, title, content, create_time这里要特别说一下openid字段。微信小程序登录时前端调用wx.login()拿到一个code后端拿code去微信接口换openid这个openid是用户在小程序里的唯一身份标识。数据库里用openid做唯一索引防止重复注册。文章表里的status字段也值得多花两句话小王提交攻略后管理员要先审核审核通过后才能在前台展示。这个设计不是多余的而是完整系统的必备环节也方便你在答辩时讲“权限控制”和“内容安全审核”的机制。2.2 后端接口设计——规范比数量重要接口不是写完就行写规范才能减少联调矛盾。我用自己的习惯给你一个接口清单参考模块路径方法说明用户端/api/user/loginPOST微信登录传code返回token和用户信息用户端/api/user/updatePUT修改昵称头像攻略/api/article/listGET攻略列表分页支持分类和关键字筛选攻略/api/article/detailGET攻略详情需传id攻略/api/article/publishPOST发布攻略攻略/api/article/myGET我发布的攻略列表收藏/api/favorite/addPOST收藏攻略收藏/api/favorite/listGET收藏列表点赞/api/like/addPOST点赞再次请求为取消点赞分类/api/category/listGET分类列表评论/api/comment/listGET攻略评论列表评论/api/comment/addPOST发表评论管理端/admin/loginPOST管理员登录管理端/admin/user/listGET用户列表管理端/admin/article/auditPOST审核攻略管理端/admin/category/savePOST新增/编辑分类有一点必须强调用户相关的接口要鉴权。最轻量的方案是JWTJSON Web Token。用户登录后后端生成token返回小程序端把token存到storage里后续请求带上Authorization: Bearer token字段后端用拦截器校验token是否有效无效则返回401。如果不想引入JWT的复杂度也可以用简单的Redis缓存session但从毕设完整性和面试可聊的角度JWT更好。2.3 小程序端开发——页面与交互小程序端是整个项目的门面评委一眼看过去的就是这个。页面核心有首页轮播图分类导航热门攻略瀑布流、分类页左边分类导航、右边攻略列表、发布页填写标题、选分类、传封面图、编辑正文、个人中心页头像昵称、我的攻略、我的收藏、意见反馈。这里我得敲一下黑板上传图片是小程序端最容易被卡住的环节。小程序wx.uploadFile接口只能一次传一个文件并且要配合后端接口接收文件参数。我建议的流程是先调用后端/api/upload接口把图片传到服务器返回URL再把URL存到攻略数据里。这样比直接把图片传后端绕一圈更简单也方便管理后台直接展示图片。真机调试时“合法域名”配置也是个经典坑。微信开发者工具默认不校验合法域名真机上会校验。毕设阶段如果没有正式备案的HTTPS域名直接在微信公众平台的开发设置里勾选“不校验合法域名、web-view业务域名、TLS版本以及HTTPS证书”或者用手机连上WiFi打开调试模式就行。2.4 Vue管理后台——用合理复杂度完成任务管理后台不必做得花里胡哨核心是把管理功能完成。我建议用Vue3 Vite Element-Plus这套组合熟悉Vue2的话用Vue2 Element-UI也完全没问题难度系数更低。后台页面通常包括登录页管理员账号密码、Dashboard数据看板总用户数、攻略总数、待审核数、用户管理表格列表、禁用/启用、攻略管理表格列表、审核、下架、分类管理表单公告管理表单。有一点要提前规划好路由守卫。未登录状态下用户应该被重定向到登录页登录后存一个token到localStorageaxios请求拦截器里加上token响应拦截器里遇到401就踢回登录页。这一套做完后台的基本框架就立住了。3. 实操过程与核心环节实现3.1 后端环境配置与项目初始化先从后端说起。开发工具统一用IDEAJDK版本建议1.8或11SpringBoot版本2.7.x这个版本最稳资料最多不要一上来就追3.x很多依赖兼容性会把你搞崩溃。第一步在Spring Initializrstart.spring.io上生成项目骨架选依赖Spring Web、MyBatis、MySQL DriverLombok看个人习惯我建议加上能少写一堆getter/setter。生成后解压用IDEA打开目录结构长这样src/main/java/com/example/game ├── controller ├── service ├── mapper ├── entity ├── config ├── common └── GameApplication.java这里我强烈建议你不要只用MyBatis的注解或XML至少要学会最简单的注解方式比如Select、Insert。MyBatis-Plus则更简单单表CRUD基本不用写SQL自带分页插件。如果你之前没怎么接触过直接用MyBatis-Plus就好它能帮你节省大量时间。application.yml里配置数据源server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/game_strategy?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl注意serverTimezone必须设置为Asia/Shanghai否则连接池报时区错误这是新手最常见的坑之一。3.2 数据库建库建表实操在MySQL命令行或Navicat里执行建库语句CREATE DATABASE IF NOT EXISTS game_strategy DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE game_strategy;然后依次建表。产品里给一个用户表实际DDLCREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, openid varchar(64) NOT NULL COMMENT 微信唯一标识, nickname varchar(50) DEFAULT NULL COMMENT 昵称, avatar varchar(255) DEFAULT NULL COMMENT 头像, role tinyint(1) DEFAULT 0 COMMENT 角色0-普通用户 1-管理员, status tinyint(1) DEFAULT 1 COMMENT 状态1-正常 0-禁用, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY idx_openid (openid) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;article表的关键地方是content字段用text类型存富文本或纯文本cover_image存图片URLstatus默认0表示未审核。分类表里先预置几条真实游戏分类比如“原神”“王者荣耀”“英雄联盟”“和平精英”。这些建表语句建议写进init.sql文件随项目交付方便别人导入。3.3 后端核心代码实现——登录与攻略发布登录接口是小程序调用后端的第一道关口。核心逻辑是PostMapping(/login) public Result login(RequestBody LoginRequest request) { String code request.getCode(); // 调用微信接口换取openid String url https://api.weixin.qq.com/sns/jscode2session?appid appid secret secret js_code code grant_typeauthorization_code; // 用RestTemplate请求url拿到openid // 查数据库不存在则注册新用户 // 生成JWT token返回 return Result.success(token, user); }这里appid和secret要替换成你自己注册的小程序账号的在微信公众平台开发管理开发设置里能看到。注意不要把secret写在前端代码里只能留在后端。每个小程序用户对应一个openid数据库里查不到就代表新用户自动注册。攻略发布接口接收攻略标题、分类id、封面图、内容。发布后status设为0待审核。用MyBatis-Plus插入即可PostMapping(/publish) public Result publish(RequestBody Article article) { // 当前登录用户id从token中解析 Long userId JwtUtil.getUserIdFromToken(request.getHeader(Authorization)); article.setUserId(userId); article.setStatus(0); article.setViewCount(0); article.setLikeCount(0); article.setFavoriteCount(0); articleService.save(article); return Result.success(); }3.4 小程序端核心代码实现——登录、首页与发布小程序端我习惯用uni-app开发因为一套代码同时支持微信小程序和H5但这里为了保持架构清晰直接用原生微信小程序写也没问题。小程序登录wx.login({ success: res { wx.request({ url: http://localhost:8080/api/user/login, method: POST, data: { code: res.code }, success: res { wx.setStorageSync(token, res.data.data.token); wx.setStorageSync(userInfo, res.data.data.user); } }); } });首页攻略列表用wx.request调用后端接口拿到数据后用setData渲染wx.request({ url: http://localhost:8080/api/article/list, method: GET, data: { page: 1, pageSize: 10, categoryId: categoryId }, header: { Authorization: Bearer wx.getStorageSync(token) }, success: res { this.setData({ articleList: res.data.data.records }); } });发布攻略表单收集完数据后先上传封面图拿到URL再提交攻略内容wx.chooseMedia({ count: 1, mediaType: [image], success: res { const tempFilePath res.tempFiles[0].tempFilePath; wx.uploadFile({ url: http://localhost:8080/api/upload, filePath: tempFilePath, name: file, success: uploadRes { const imageUrl JSON.parse(uploadRes.data).data; // 把imageUrl和表单内容一起提交 } }); } });3.5 管理后台核心代码实现——Vue3 Element-Plus管理后台的骨架用Vite创建项目npm create vitelatest admin -- --template vue cd admin npm install npm install element-plus axios vue-router后端管理接口全在/admin路径下管理员需要在user表里把role设为1。管理员登录后拿到token和普通用户token一样只是角色权限不同。后端用拦截器校验token后再校验用户角色是否为管理员不是就返回403。管理后台的一个关键页面——攻略审核用Element-Plus的el-table展示攻略列表每条数据带“通过”和“下架”按钮const audit (row, status) { axios.put(/admin/article/audit, { id: row.id, status: status }).then(res { ElMessage.success(操作成功); loadArticleList(); }); };后端对应接口很简单把status改为1通过或2下架即可。3.6 部署与运行演示全流程到了答辩阶段你不可能在答辩现场跑IDEA和Vite开发服务器所以要把整个项目部署到服务器上至少能让评委看到线上运行效果。推荐方案服务器阿里云/腾讯云轻量应用服务器最低配2核2G足够装CentOS或Ubuntu系统后端部署本地用Maven打包mvn clean package在服务器上装好JDK直接nohup java -jar game-strategy.jar 运行端口默认8080数据库部署云服务器装MySQL导入init.sql注意开放3306端口给外网连接管理后台部署本地npm run build生成dist目录用Nginx静态部署同时把/api反向代理到后端端口小程序端开发者工具里把请求地址改成服务器IP或域名上传代码体验版用手机扫码真机体验这里要特别说一句如果你只想答辩现场演示不要求线上跑那就本机起MySQL、后端、Vue管理端小程序开发者工具打开即可简单很多。但如果放服务器上记得在数据库配置里把localhost改成云服务器内网地址还有安全组要放行8080和3306端口别问我怎么知道的——这个坑我踩了不止一次。4. 常见问题与排查技巧实录4.1 小程序真机请求后端超时或失败这个问题出现频率最高。原因基本是这几类本机开发时小程序请求http://localhost:8080是不通的因为localhost指向手机自己不是电脑。要把地址改成电脑在局域网里的IP比如http://192.168.1.5:8080。服务器部署时域名没有备案或没走HTTPS。小程序必须在公众平台配置合法域名开发阶段可以在开发者工具右上角“详情-本地设置-不校验合法域名”打钩。防火墙/Security Group没开。云服务器默认只开放80和22端口记得放行8080。4.2 MyBatis-Plus分页查不出数据或报错分页功能必须配置MyBatis-Plus的分页插件否则分页不生效Configuration public class MybatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }不配这个你调用page()方法时虽然不报错但返回的总数和记录不全坑得你怀疑人生。4.3 上传图片后访问404图片上传成功但URL访问不到。原因通常是后端没给静态资源映射。在SpringBoot中配置文件里加spring: web: resources: static-locations: file:D:/upload/,classpath:/static/上传文件保存在D:/upload/访问路径http://localhost:8080/images/xxx.jpg时SpringBoot会去这个目录找文件。或者在配置类里手动注册WebMvcConfigurer。4.4 数据库中文乱码统一用utf8mb4就能避免。建库时指定DEFAULT CHARSETutf8mb4数据库连接URL加上characterEncodingutf8表结构字段也都用utf8mb4。万一已经乱码了检查Navicat建表时的字符集以及SpringBoot的spring.datasource.url参数。4.5 Vue后台打包后刷新404这是前端路由history模式的问题。Vue Router默认用createWebHistoryNginx需要配置try_files回退location / { try_files $uri $uri/ /index.html; }否则你点浏览器刷新就被Nginx当成路径请求返回404。换成hash模式createWebHashHistory也可以但URL里会有个#不太好看。4.6 微信小程序分包异步化、单选框等细节很多同学刷热搜词时看到“微信小程序分包异步化”“单选框”其实在毕设阶段项目体积通常不大完全不涉及分包。但如果你想提前把攻略列表页拆成独立分包让首页秒开那就要注意分包里的异步化在微信基础库2.11.2才支持而且不能在主包里直接同步引用分包资源。我的建议是除非微信提示你主包超过2MB否则不要碰分包毕设项目把精力放在功能完整度上更重要。单选框的话用原生radio-group和radio组件v-model绑定即可不用引入第三方组件库避免增加依赖。4.7 数据库连接失败OutOfMemoryError服务器内存小就会出java.lang.OutOfMemoryError: insufficient memory。这一般是JVM启动时分配堆内存过大比如默认拿机器一半内存。解决方法是启动时限制内存nohup java -Xms256m -Xmx512m -jar game-strategy.jar 2G内存的机器配512M堆绰绰有余。5. 项目亮点与答辩加分项5.1 简历和答辩中值得突出的三个亮点做完整个项目你会发现自己不知不觉积累了很多可聊的东西。我建议你在答辩和写简历时重点突出以下几个点完整的权限控制链路小程序端JWT鉴权、管理端管理员权限校验、用户禁用后拦截器直接拒绝访问。这套东西不是每个毕设都有的讲出来就是加分项。内容审核机制攻略发布后不能直接展示要经过管理员审核。这体现的是对内容安全和产品运营的理解而不只是技术实现。合理的表结构设计文章表拆开view_count、like_count、favorite_count这些冗余统计字段查询时不用实时count提升性能。这个细节体现了你的数据库设计能力。5.2 在答辩现场怎么讲这个项目答辩最忌讳背“流水账”登录功能是…发布功能是…查看功能是…。正确的讲故事方式是以“场景设计实现”三层递进比如讲到攻略审核你可以这么说“用户在端上发布攻略后系统并不会立刻公开展示而是进入待审核状态。管理员在管理后台看到待审核列表审核通过后攻略才出现在首页。这个机制保证了内容质量也防止垃圾信息污染社区。技术上我通过status字段做了状态机控制状态流转是草稿→待审核→已发布→已下架每一步都有对应的管理员操作触发。”再比如讲到小程序登录“微信小程序的登录不能自己造账号体系而是通过wx.login获取临时code后端拿着code去微信的jscode2session接口换openid这个openid是用户在微信生态里的唯一身份标识。这样用户不用输入用户名密码体验非常顺畅。”这类回答听起来有思考深度评委的印象分自然就上去了。5.3 后续可以怎么扩展如果时间充裕或者想在代码里埋一些“彩蛋”可以顺手做下面这些事搜索功能攻略列表页加一个搜索框后端用LIKE %关键字%查询标题和内容简单好用。浏览记录用户每次打开攻略详情插入一条浏览记录个人中心展示最近浏览。热门排行榜按view_count排序做一个今日热门攻略榜单首页放上“本周TOP10”。图片懒加载攻略列表里的图片用微信小程序的lazy-load属性长列表滚动更流畅。这些扩展点不需要复杂的架构调整都是基于现有表结构加字段、加接口就能实现但能让你的项目从“能跑”变成“好看”。6. 写在最后的实操心得做这个项目我最大的体会是——毕设真正难的不是技术而是“不给自己挖坑”。很多同学项目做不下去不是因为哪块技术学不会而是因为没规划就动手写到一半发现表设计不合理、接口风格不统一、前端页面和后端字段对不上。所以我一再强调先把表结构和接口文档定下来再开始写代码磨刀不误砍柴工。另外说点实在的开发过程中一定要用Git做版本管理哪怕只有自己一个人开发。我见过太多学生改代码改出问题结果回不去上一个能跑的版本急得满头大汗。每完成一个功能模块就提交一次比如“完成用户登录功能”、“完成攻略发布功能”这样万一改挂了git checkout一下就能回来一秒钟的事。数据库导出那段也别偷懒开发过程中每隔几天就导出一份最新的init.sql命名带上日期比如init_20240115.sql。到了跟导师交材料、写文档的时候你会感谢自己这个习惯的。最后这个项目做完以后不只是交差而已。SpringBoot那套开发流程、Vue的管理后台搭建、MVP的分层设计、小程序的真机调试任何一个点放到实习面试里都能聊上一阵子。如果后续还想进阶可以试试把服务拆成一个小型微服务项目、引入Redis做缓存、或把图片存储换成阿里云OSS都是很好的成长方向。代码这东西只有自己一行行敲过、一个个坑踩过、一次次调试过才是真正长在身上的本事。祝你的毕业设计顺利过关。本文还有配套的精品资源点击获取
返回列表