
简介本资源是一套基于Java、SSM框架、MySQL数据库与微信小程序开发的答题小程序完整项目包面向计算机相关专业学生、毕业设计选题者及课程设计需求者可直接用于毕设、期末大作业或在线答题场景的二次开发。压缩包共1095个文件约14.92MB涵盖88个Java后端源码、115个Vue前端组件、52个WXML与48个WXSS小程序页面文件以及PNG、SVG等界面素材和SQL数据库脚本、论文文档前后端代码与数据库脚本齐全。项目采用IDEA与微信开发者工具开发Maven构建MySQL 5.7以上配合Navicat管理功能覆盖用户注册登录、题目展示、在线答题、成绩统计及管理员题库与权限管理。已有68人学习关注。资源经过导师指导与严格调试下载即用无需修改可帮助读者快速理解SSM与小程序联调思路节省从零搭建的时间成本。1. 从一份「答题小程序」源码包说起SSM 后端 微信小程序前端到底怎么落地很多同学拿到「基于 JavaSSMMySQL微信小程序的答题小程序」这类毕业设计源码包时第一反应是解压、找README、然后卡在第一步——数据库连不上或者小程序端请求 404。这个标题背后其实是一条非常典型的全栈链路后端用 SSMSpring SpringMVC MyBatis提供 REST 接口MySQL 存题库、用户、答题记录微信小程序负责页面渲染和交互。它解决的核心问题是「一套可运行的在线答题系统」适合课程设计、毕业设计、以及想练手 Java Web 小程序联调的新手。我见过太多人把源码跑成「只能看不能动」的黑匣子这篇就按我实际部署的顺序把环境、建库、接口、联调、避坑一次讲透让你拿到包之后能自己改题、加题型、换皮肤而不是只会截图交差。2. 环境与工程结构先把 SSM 后端和 MySQL 跑起来2.1 JDK、Tomcat、Maven 的版本选择与验证SSM 项目对版本比较敏感尤其是 Spring 4.x/5.x 和 JDK 8 的搭配。我一般固定用 JDK 81.8.0_xxxTomcat 8.5 或 9.0Maven 3.6。别上来就 JDK 17SSM 老项目里javax.*和反射会给你惊喜。验证命令如下java -version mvn -v输出里确认java version 1.8.0和 Maven 的Java version: 1.8。如果mvn -v显示 JDK 17去~/.mavenrc或系统环境变量JAVA_HOME改回 JDK 8。参数说明JAVA_HOME指向 JDK 根目录不是binPATH里加%JAVA_HOME%\bin。这一步翻车最多现象是mvn clean package报Unsupported class file major version。2.2 用 Navicat 或命令行导入 MySQL 数据库源码包里通常有db.sql或answer_db.sql。先建库再导表CREATE DATABASE answer_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE answer_db; SOURCE D:/project/db.sql;如果你用 Navicat右键连接 → 新建数据库 → 字符集选utf8mb4→ 运行 SQL 文件。注意utf8mb4才能存 emoji 和生僻字utf8在 MySQL 里其实是utf8mb3遇到四字节字符会截断。导入后执行SHOW TABLES;正常应看到user、question、answer_record、question_type等表。参数说明SOURCE路径用正斜杠或双反斜杠Windows 下单反斜杠会被当转义。2.3 改jdbc.properties并启动 Tomcat在src/main/resources下找jdbc.propertiesjdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/answer_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse jdbc.usernameroot jdbc.password你的密码逻辑说明com.mysql.cj.jdbc.Driver对应 MySQL Connector/J 8.x如果你用的是 5.x 驱动类名是com.mysql.jdbc.Driver。serverTimezone必须加否则报The server time zone value ?D1ú±ê×?ê±?? is unrecognized。useSSLfalse避免本地自签证书警告。改完在 IDEA 里配 TomcatApplication context 设/或/answer启动后访问http://localhost:8080/看是否出现登录页或接口返回。常见现象404 说明web.xml里DispatcherServlet映射没生效500 且日志有NoSuchBeanDefinitionException检查applicationContext.xml的包扫描路径是否覆盖了你的controller包。3. 后端接口与小程序请求封装让答题数据真正跑通3.1 题库、答题记录表结构与 MyBatis 映射先看核心表设计这决定了你后面加题型顺不顺手表名关键字段说明questionid,type_id,content,option_a~d,answer,analysis题干、选项、正确答案、解析question_typeid,name单选、多选、判断answer_recordid,user_id,question_id,user_answer,is_correct,create_time每次作答流水userid,openid,nickname,score小程序用户openid唯一MyBatis 的QuestionMapper.xml里通常有selectByType和selectRandom。如果你要改随机抽题把ORDER BY RAND() LIMIT #{num}换成先查 ID 再IN数据量大时RAND()会全表扫描。参数说明#{num}是预编译占位别写成${num}否则有 SQL 注入风险。3.2 用wx.request封装统一请求与登录态小程序端别在每个页面裸写wx.request我一般封一个request.jsconst BASE_URL http://localhost:8080/answer; function request(options) { return new Promise((resolve, reject) { wx.request({ url: BASE_URL options.url, method: options.method || GET, data: options.data || {}, header: { content-type: application/json, token: wx.getStorageSync(token) || }, success(res) { if (res.data.code 200) resolve(res.data.data); else { wx.showToast({ title: res.data.msg, icon: none }); reject(res.data); } }, fail(err) { wx.showToast({ title: 网络异常, icon: none }); reject(err); } }); }); } module.exports { request };逻辑说明BASE_URL本地调试用localhost真机预览要换成局域网 IP 或已备案域名且小程序后台配置request合法域名。token从缓存取登录后写入。参数说明header里content-type用application/json后端RequestBody才能接住如果后端用RequestParam改成application/x-www-form-urlencoded。常见坑开发者工具勾了「不校验合法域名」能跑真机不行这是两套校验。3.3 登录、交卷、错题本三个接口的联调顺序联调别一上来就交卷按「登录 → 拉题 → 交卷 → 查记录」走。登录接口用wx.login拿code换openidwx.login({ success(res) { request({ url: /user/login, method: POST, data: { code: res.code } }) .then(data { wx.setStorageSync(token, data.token); }); } });后端UserController.login里用code调微信接口换openid再查库插入或更新user生成 token 返回。交卷接口收userId、questionId、userAnswer数组逐条比对answer字段写answer_record同时更新user.score。错题本就是SELECT * FROM answer_record WHERE user_id? AND is_correct0。参数说明code只能用一次5 分钟过期openid不要暴露给前端做业务主键用自增id或 UUID。联调时打开小程序开发者工具的 Network 面板看请求体、响应体、状态码比猜快得多。4. 避坑与排查数据库、跨域、真机调试的 5 个血泪记录4.1 现象启动报Access denied for user rootlocalhost原因jdbc.properties里的密码和 MySQL 实际密码不一致或者 MySQL 8 的caching_sha2_password插件导致旧驱动连不上。解决先用命令行mysql -uroot -p确认密码如果驱动是 5.x执行ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 新密码;并FLUSH PRIVILEGES;。然后确认pom.xml里mysql-connector-java版本与驱动类名匹配。4.2 现象小程序请求返回 404 或 405原因BASE_URL拼错或者后端RequestMapping路径多了/少了斜杠。解决在浏览器直接访问http://localhost:8080/answer/user/login看是否 404。405 通常是 GET/POST 不匹配检查RequestMapping(method RequestMethod.POST)。另外 Tomcat 的Application context如果是/answerBASE_URL就要带/answer别一个带一个不带。4.3 现象真机预览请求失败开发者工具正常原因真机不认localhost也不认未配置的域名。解决手机和电脑连同一 WiFiBASE_URL换成电脑局域网 IPipconfig查小程序后台「开发设置」里把http://你的IP:8080加入 request 合法域名或者真机调试时打开「调试模式」临时跳过校验。注意正式发布必须 HTTPS 且域名已备案。4.4 现象交卷后分数不对多选总是判错原因多选答案存的是A,B前端传的是[A,B]后端直接equals字符串。解决后端统一把选项排序后拼接再比对或者用集合containsAll。参数说明answer字段建议存排序后的字符串如A,B,C前端提交前也排序避免顺序不同导致误判。4.5 现象MySQL 中文乱码题目显示问号原因建库时用了latin1或utf8连接串没加characterEncodingutf8。解决ALTER DATABASE answer_db CHARACTER SET utf8mb4;表也改连接串加useUnicodetruecharacterEncodingutf8。如果已经乱码数据可能救不回来重新导入db.sql最稳。我一般建库时就固定utf8mb4省得后面后悔药都没得吃。5. 进阶技巧把「能跑」变成「能改、能扩、能答辩」5.1 用拦截器统一校验 token 和答题时限别在每个 Controller 里写 token 校验加一个LoginInterceptorpublic class LoginInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token request.getHeader(token); if (token null || !tokenService.validate(token)) { response.setStatus(401); response.getWriter().write({\code\:401,\msg\:\未登录\}); return false; } return true; } }逻辑说明preHandle返回false直接中断前端收到 401 就跳登录页。参数说明在spring-mvc.xml里配mvc:interceptorexclude-mapping排除/user/login和静态资源。答题时限可以在 Redis 里存exam:userId:startTime交卷时算差值超过就拒绝。没有 Redis 就用answer_record第一条的时间戳兜底。5.2 加判断题和填空题的最小改动路径判断题复用question表type_id3option_a正确、option_b错误前端根据type_id渲染不同组件。填空题加一个blank_answer字段后端比对时去空格、忽略大小写。改动点只有三处question表加字段、QuestionMapper.xml的resultMap加映射、小程序question.wxml加wx:if分支。别重写一套表否则论文里的 E-R 图要重画。5.3 答辩前必做的三个验证第一清空answer_record用两个不同openid各答一遍确认分数隔离第二把question表删到只剩 5 条看随机抽题是否越界报错第三断网后点交卷看是否有友好提示而不是白屏。这三个场景答辩老师最爱问。我自己的习惯是每次改完 SQL 或接口先跑一遍「登录→答题→交卷→错题本」全链路再截图存档。希望帮到你。本文还有配套的精品资源点击获取