
简介这是一套基于SSM框架与Vue技术栈的仓库管理信息系统毕业设计源码面向Java方向毕业生、课程设计者及需要快速搭建后台管理项目的开发者。系统后台采用SSM后台管理页面由Vue实现前端页面为HTML配合MySQL数据库与JDK1.8环境支持Eclipse、MyEclipse、STS、IDEA等常见IDE导入运行。功能覆盖个人中心、员工管理、仓库公告、供应商管理、客户信息管理、仓库信息管理、货物信息管理、货物入库与出库管理等模块完整适合直接作为毕设演示或二次开发基础。资源包共464个文件含112个Java源码文件、45个Vue文件、24个JS文件、20个XML配置、2个SQL数据库脚本及图片、文档、环境脚本等整体大小约44.07MB目录结构清晰另附相同框架项目的安装教程说明文档以及环境工具包能够帮助使用者快速完成环境配置与项目启动。该资源已有82人学习下载对于需要参考完整SSMVue前后端整合流程的读者来说是一份实用的毕业设计参考资料。1. 这套SSMVue仓库管理系统是拿来复现的不是拿来收藏的每年到毕业设计节点不少人在群里问仓库管理系统源码哪套能真正跑起来我拆过不少同类项目翻车点高度集中——要么只有Java文件没数据库脚本要么SQL脚本跟本机MySQL版本对不上要么教程步骤跟手里的IDE操作界面完全是两个世界。这套java仓库管理信息系统是个例外后台SSM后台页面Vue前端页面HTML数据库MySQLJDK1.8Eclipse、MyEclipse、STS、IDEA都兼容功能覆盖员工管理、仓库公告、供应商、客户、仓库、货物信息、入库、出库、个人中心九个入口另附源码、数据库脚本、环境工具包和安装教程。它省掉的是从零摸清一套Web项目怎么组织代码、怎么配环境、怎么联调接口的时间。新手照着教程跑通后基本就明白SSM项目的完整生命周期有基础的人把这套分层写法抽出来换到别的题目上复用也很顺手。下面从技术栈拆起再讲怎么跑、怎么改、坑在哪。2. 把技术栈拆开SSM、Vue、MySQL在仓库系统里怎么分工很多同学把SSM理解成“用了三个框架”这是没抓到本质。SSM在运行时是一条链浏览器请求先到SpringMVC的DispatcherServlet由它根据URL找到对应ControllerController只做参数接收和结果返回业务逻辑在Service层Service调用Mapper接口Mapper通过MyBatis把SQL发给MySQL执行查询结果再逐层返回最终以JSON格式回到浏览器。Spring在整条链上负责管理对象Controller、Service、Mapper这些类的实例由它创建和注入事务、拦截器这类横切逻辑也在Spring配置里统一处理。分层的意义在于每一层都能被单独替换排查问题时也可以按层定位。打开这套仓库管理系统的源码先看包结构。常见写法是src/main/java ├── controller // 接收请求、返回JSON ├── service // 业务逻辑比如入库扣减库存 ├── dao // MyBatis的Mapper接口 └── entity // 对应数据表的实体类下载资源里的实际目录结构可能有细微差别比如dao层叫mapper但不影响理解。拿到任何一套SSM项目我习惯先按这个包路径定位文件因为新人很容易被一整个项目的文件列表带偏。2.1 Controller收参数Service出业务Mapper出SQL先看Controller层最典型的写法Controller RequestMapping(/goods) public class GoodsController { Autowired private GoodsService goodsService; ResponseBody RequestMapping(/list) public Result list(RequestParam(defaultValue 1) Integer page, RequestParam(defaultValue 10) Integer limit) { // 分页查询货物列表 return goodsService.page(page, limit); } }RequestMapping(/goods)定义了这个类的根路径/list是方法路径。如果项目部署后上下文根是项目名完整访问路径就是http://localhost:8080/项目名/goods/list。ResponseBody表示返回值直接写进HTTP响应体配合JSON工具转成前端能识别的格式。page和limit是分页参数defaultValue给默认值前端不传时不会报错。Result是这类项目里最常见的统一返回体一般有code、msg、data三个字段前端拿code判断成功失败。这里有个细节如果返回类型直接写List而不是Result逻辑上不是不行但异常处理会变得很零散答辩老师也容易追着问“查询失败时前端怎么知道”所以统一返回体不是可有可无的设计。Service层的核心是事务。入库这个动作在多数设计里是一个业务方法它要同时做两件事往入库单表插一条记录再改动货物表的库存数字。两件事必须作为一个整体。下面是一段典型的Service实现Service public class GoodsServiceImpl implements GoodsService { Autowired private GoodsMapper goodsMapper; Transactional Override public void inbound(Goods goods, int count) { // 1. 写入入库记录 goodsMapper.insertInbound(goods.getId(), count); // 2. 更新库存数量 goodsMapper.updateStock(goods.getId(), count); } }Service把类交给Spring容器管理Autowired完成依赖注入Transactional给这个方法套上数据库事务。执行过程中任何一步抛异常前面已经执行的SQL会被回滚。你可能会问写成两个独立的Mapper方法调用不就行了不行的原因在于如果第一个insert成功了第二个update因为SQL写错抛了异常事务不加上的话库存数据就已经不一致了。数据库事务就是干这个的。Mapper层是MyBatis的地盘。SQL通常写在XML里而不是Java代码里update idupdateStock UPDATE goods SET stock stock #{count} WHERE id #{id} /updateupdateStock对应Mapper接口里的方法名SQL里的#{count}和#{id}从方法参数取。把SQL单独放XML的好处是改SQL不用动Java代码这是MyBatis比JDBC好用的核心原因。代码里没有写parameterType这是MyBatis 3.x以后的常见写法参数类型由方法签名推断少写一行少一处错。拿到项目后如果你要改库存逻辑最先应该打开的就是这个XML文件。2.2 Vue在后台的角色页面只是接口的壳传统JSP项目里页面在服务端渲染浏览器拿到的是已经拼好的HTML。这套项目的后台页面用Vue写走的是另一个路子浏览器先加载一个空的Vue页面然后Vue通过Ajax向后端接口要数据拿到JSON后再把表格、表单渲染出来。这样一个后台管理页面本质上只是接口的展示壳。货物信息列表页的写法通常长这样export default { data() { return { list: [], page: 1, limit: 10 }; }, methods: { async fetchList() { // 向后端要分页数据 const res await axios.get(/goods/list, { params: { page: this.page, limit: this.limit } }); if (res.data.code 0) { this.list res.data.data; } } }, mounted() { // 页面挂载完成后立刻拉一次数据 this.fetchList(); } };axios是在浏览器里发Ajax请求的库get方法第一个参数是接口路径params对应后端拿到的page和limit。mounted是Vue组件生命周期里的一个钩子表示组件已经挂载到页面上这时候去请求数据是最常见的时机。如果发现列表页刷新后是空的最先检查两个地方一是接口路径是否拼上了项目上下文根二是后端返回的code判断条件是否和实际一致。这个项目压缩包里有一批.bak文件比如update-password.vue.bak、IndexMain.vue.bak这些是开发者留的Vue组件备份。正常启动时IDE不会编译.bak文件如果你发现哪个页面组件缺失把同名的.bak改成.vue再刷新通常能把组件找回来。这不是故障是开发者留的后手别看到.bak就当成垃圾文件删掉。2.3 九个功能入口背后仓库、货物、入出库单怎么关联功能模块可以映射成一张数据表关系图。按这套项目的常规设计核心表格大概是下面这个对应关系功能入口通常对应的数据表常见关键字段个人中心user / employeeusername、password、role员工管理employeename、dept、phone仓库公告管理noticetitle、content、create_time供应商管理suppliername、contact、phone客户信息管理customername、contact、phone仓库信息管理warehousename、location、manager货物信息管理goodsname、spec、stock、warehouse_id货物入库管理inboundgoods_id、count、supplier_id、oper_time货物出库管理outboundgoods_id、count、customer_id、oper_time具体表名和字段请以压缩包里的数据库脚本为准不同版本会有些出入但表之间的关联关系基本都长这样货物表通过warehouse_id挂在某个仓库下入库单通过goods_id引用货物、通过supplier_id引用供应商出库单通过goods_id引用货物、通过customer_id引用客户。这个模型只要画出来答辩老师第一问基本就过关了。我一般会建议拿到脚本后先把上面这张关系画在纸上因为后续不管是改功能还是答“为什么这么设计”都要用到它。比如老师问你“入库单为什么要存供应商ID不直接用名称”答案是为了联表统计想知道某供应商一段时间送了多少货SQL直接join supplier表按ID分组就行存名称反而受改名影响。这类细节是加分项。3. 把陌生项目跑起来环境、数据库、启动脚本的操作顺序拿到任何一套SSM项目第一反应应该是“先把运行环境理清再动手”而不是急着把代码导入IDE。否则后边每次报错都会怀疑是环境问题还是代码问题。3.1 环境版本怎么定JDK 1.8、MySQL 5.7、Tomcat 8.5项目要求在JDK1.8下运行那Spring版本大概率在5.x上下的区间这套组合非常成熟。我踩过几次JDK版本错位的坑之后总结机器上没有Java环境就直接装一个JDK8不要在系统里并行一堆JDK容易让IDE误判。装完之后配置环境变量JAVA_HOMEC:\Program Files\Java\jdk1.8.0_202 PATH%JAVA_HOME%\bin;%PATH%配置完成后新开一个命令行窗口验证java -version控制台打印出java version 1.8.0_202之类的内容说明环境OK。这里有个经验如果输出的是JRE而不是JDK的版本说明PATH里被别的Java抢了先检查一下环境变量顺序。MySQL方面脚本是早期项目风格的话推荐用5.7而不是8.0因为8.0的默认认证插件是caching_sha2_password老版本的mysql-connector-java驱动连不上会报认证失败。Tomcat我习惯用8.5.x老SSM项目基于Servlet 3.1规范8.5兼容性最好。这套组合不需要追求新版本稳定压倒一切。3.2 三个bat脚本先install、再run、最后才是build压缩包里有三个批处理文件命名按顺序排好了1-install.bat、2-run.bat、3-build.bat。这是典型的Maven项目脚本三件套。1-install.bat从命名看是负责本地依赖安装常见内容无非是mvn install或mvn clean install目的是把项目依赖和自身模块装进本地Maven仓库。2-run.bat对应的是启动入口如果项目是嵌入式Tomcat启动会执行spring-boot:run或类似命令如果是外置Tomcat那这个脚本负责把war包部署到webapps目录并启动Tomcat服务。3-build.bat是打包脚本一般执行mvn clean package最终在target目录下产出war或jar。一个典型的构建脚本内容大致长这样mvn clean package -DskipTests copy target\*.war C:\apache-tomcat-8.5.100\webapps\mvn clean package先清理旧产物再重新打包-DskipTests跳过测试因为答辩项目往往没有完整测试用例跳过可以避免因测试类问题打包失败。第二行的copy把war复制到Tomcat的webapps目录Tomcat启动时会自动解压部署。如果你拿到的是Maven项目且首次用IDEA打开建议按1、2、3的顺序执行先install把依赖拉完整再run看能否启动最后才build打包。反过来直接点build可能因为本地仓库没依赖直接报错。3.3 导入数据库脚本与改数据源配置数据库文件一般在压缩包的sql或db目录里文件名类似warehouse.sql。导入之前先确认MySQL服务是启动状态然后在命令行执行mysql -u root -p warehouse.sql-u root指定用户-p表示输入密码重定向符把SQL文件内容喂给mysql客户端。执行完没有任何报错输出通常就是成功。验证一下表是否建好mysql -u root -p -e USE warehouse_db; SHOW TABLES;把warehouse_db换成脚本里实际的库名。看到一堆表名输出说明导入成功。如果提示Unknown database说明SQL脚本开头的建库语句被跳过或库名不同手动补一条CREATE DATABASE即可。数据库导入之后Java代码并不知道数据库在哪。SSM项目的数据库连接通常统一写在resources目录下的jdbc.properties有些项目叫db.properties找到后改成自己的账号密码jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/warehouse_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.password123456url里的每个参数都有讲究。useUnicodetrue和characterEncodingutf8解决中文乱码这是仓库系统里最常见的坑useSSLfalse关闭SSL警告MySQL8下不关的话每次启动都刷警告serverTimezoneAsia/Shanghai在MySQL8下必须指定否则连接直接超时。如果你换用了MySQL8驱动jdbc.driver对应改成com.mysql.cj.jdbc.Driver。改完保存接下来才是导入IDE。3.4 四种IDE导入差异我用IDEA的姿势最省事压缩包里有.classpath和org.eclipse.wst.common.component这两个是Eclipse/MyEclipse的Web工程定位文件说明项目在用这套IDE时可以直接部署。但如果你用Eclipse的Import→Existing Projects into Workspace却找不到这个项目别奇怪——缺少.project文件时导入列表里根本不会出现它。正确的姿势是用Eclipse或STS的Import→Maven→Existing Maven Projects选中根目录让Maven来识别。IDEA就简单得多Open直接选根目录或pom.xml等右下角依赖索引转完即可。MyEclipse对老项目宽容但界面老操作习惯和Eclipse相近。这里多说一句项目本身是给理想环境准备的但你的电脑未必是理想环境。导入后最先做的不是打开某个Controller而是看右下角Maven依赖下载进度。依赖没下载完就急着点运行报错会指向一些莫名其妙的类找不到。教程里如果写明“先等索引完成再运行”这一章就不会翻车。4. 避坑手册SSMVue仓库系统最常见的六个翻车现场这一章写给所有准备在答辩前夜才开始跑项目的人。下面这些坑我全都见过按现象、原因、解决三段说明你可以直接对照排查。4.1 Tomcat能启动但访问页面404现象Tomcat正常启动浏览器访问项目路径却始终404Tomcat控制台也没有异常堆栈。原因最常见的是项目根本没部署进去。外置Tomcat部署方式是war包放进webapps目录启动时会自动解压如果你用IDEA的Tomcat配置但没在Deployment里添加Artifact那么Tomcat起来了webapps下却没有这个项目。解决先看Tomcat的webapps目录里有没有对应的项目文件夹或war包没有就手动拷贝。用IDEA部署时打开Run/Debug Configurations在Tomcat Server的Deployment标签页里点加号把自己的war exploded加进去再设置Application context为项目名。改完重启Tomcat控制台出现Deploying web application archive字样就说明部署成功。4.2 后台登录页能开进去后列表页全白现象登录页正常显示账号密码一提交页面白屏或表格区域什么都不显示。原因浏览器Console里大概率有一堆红色报错通常是某个JS文件加载失败或axios请求路径少了上下文根。还有可能是某个Vue组件文件被误命名成了.bak组件没被编译进去。解决按F12打开开发者工具切到Console和Network面板。Network里看接口请求状态404就去改axios的baseURL500就去后端日志查堆栈。如果Console报的是组件找不到去源码目录看看有没有同名的.vue.bak文件把.bak后缀去掉恢复。排查这类问题我习惯先用Network确认请求是否发出再看Console的JS报错顺序不能反——数据没请求成功和页面渲染失败是两个方向的问题。4.3 中文数据全部变成问号或乱码现象员工姓名、货物名称存进MySQL后显示为???浏览器页面里也乱成一团。原因多半是三层字符集没对齐数据库表字符集不是utf8、jdbc.url没加characterEncodingutf8、页面编码也乱。这三个里只要有一个不对中文就会出问题。解决先查数据库字符集执行SHOW CREATE TABLE goods;看到CHARSETutf8或utf8mb4就算正常否则用下面语句改表ALTER TABLE goods CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;再把jdbc.url参数补上characterEncodingutf8重启服务。改完之后新插入的数据正常历史脏数据需要删掉重录。这里有个真香经验凡是涉及中文的毕业设计项目建库时直接指定utf8mb4比后期补救省力得多。4.4 Tomcat启动报Address already in use: JVM_Bind现象双击Tomcat启动脚本或从IDE点Run控制台立刻报端口被占用Tomcat闪退。原因8080端口被别的程序或另一个Tomcat实例占用了。这个特别常见尤其是机器上已经装过某个Web服务的情况下。解决命令行执行下面命令看谁占着端口netstat -ano | findstr 8080记下最后一列的PID再执行taskkill /PID 该进程ID /F或者嫌麻烦直接改Tomcat的conf/server.xml把8080改成8081、8082都行。改完端口后记得前端接口路径也要同步否则页面请求还是指向8080。如果用的是IDEA内置Tomcat端口在Run/Debug Configurations里改不要直接改server.xml因为IDE配置会覆盖它。4.5 导入IDE后一片红Java类全部找不到现象IDEA里Java文件大面积报红Ctrl左键跳不进方法但代码本身又是完整的。原因Maven依赖没有下载完整。要么本地仓库是空的要么网络访问Maven中央仓库慢要么多模块项目里某个module没被识别。解决先确认项目是被Maven识别的IDEA右侧有Maven面板才是Maven项目。然后在pom.xml所在目录执行mvn clean install -DskipTests如果下载速度极慢去Maven的conf/settings.xml里配一个国内镜像仓库配置大致如下mirror idaliyun/id urlhttps://maven.aliyun.com/repository/public/url mirrorOfcentral/mirrorOf /mirror配好镜像再回IDEA点Maven面板里的刷新按钮重新导入依赖。注意不要用手动下载jar塞进本地仓库的方式版本对不上越搞越乱。4.6 登录页提交后没有任何响应也不报错现象输对账号密码点登录页面没反应像卡住一样Network里却能看到请求已经发出并返回了。原因请求发出且返回200但前端判断逻辑没把登录当成成功。常见于返回体里code字段的判断值和实际不符或用户状态没被写进Session后端拦截器把后续页面请求都拦住了。解决先看后端返回的JSON长什么样。比如返回的code是1而前端代码判断code0才放行登录自然无效。再检查Spring拦截器配置看是否把登录接口排除在拦截范围之外——很多项目的拦截器配置里只放行了/login其他路径一律要求Session里有用户信息。这个问题最容易让人迷惑的一点是浏览器地址没变化不代表请求失败先把Network里的响应体打开看两秒比瞎改代码高效得多。5. 改成你自己的SSMVue项目二次开发的四个落点拿到源码跑通之后最怕的就是什么都不改直接交。这里选四个最值得动手的位置都是答辩时老师会多看一眼的改动难度不大且链路完整。5.1 新增菜单和页面路由从数据库到前端路由的联动后台菜单不是每个页面写死的常规项目都会把菜单存进数据库。要新增一个“盘点管理”入口你需要处理两件事数据库和前端路由。数据库部分先在菜单表插入一行INSERT INTO menu(menu_name, url, parent_id, sort) VALUES (盘点管理, /stock/take.html, 1, 10);菜单表里的url字段对应的是前端路由路径。然后到前端路由配置文件里加路由把路径和组件关联起来。做完这两步菜单刷新后就出现了。这里有一个常被忽略的坑如果项目角色权限是动态加载的你还要确认当前管理员账号的角色是否包含这个新菜单的权限否则菜单能查到但在界面上就是不显示。新增页面时最省事的方式是复制一个现有列表页组件改掉接口路径和表格列而不是从零写一个。说到路由很多Vue项目会单独建一个router目录里面是路由配置文件。新增的页面组件只要在这个文件里注册了路径和组件关系菜单表里的url才会真正生效。这里有一个判断技巧如果新增菜单后点击跳404问题几乎一定出在路由配置上没有对应路径而不是菜单表写错。5.2 货物入库加字段一条完整的SSM改动链路想在入库单表加一个“备注”字段这是能完整体现SSM分层的问题。改动的顺序应该从数据库开始依次向上到实体类、Mapper XML、Controller最后到Vue页面。第一步数据库加列ALTER TABLE inbound ADD COLUMN remark VARCHAR(255) DEFAULT NULL COMMENT 备注;第二步实体类加字段private String remark; public String getRemark() { return remark; } public void setRemark(String remark) { this.remark remark; }第三步MyBatis XML里的insert语句加列和值insert idinsertInbound INSERT INTO inbound(goods_id, count, supplier_id, oper_time, remark) VALUES(#{goodsId}, #{count}, #{supplierId}, NOW(), #{remark}) /insert第四步Controller和Service把参数传到底最后在Vue的表单页面加上输入框。走到这里你会发现整个改动没有哪一步是“玄学”就是一条线顺着往下走。答辩老师问“这个备注字段你改了几层”你能把每一层都说出名字和职责这就叫真有参与度。这套链路就是SSMVue项目扩展业务字段的标配路径以后换任何字段都是这一个流程。注意别只把字段加到数据库和实体类就完事。最常见的半成品就是Entity里已经加了remark页面却永远拿不到这个值因为Mapper XML里的insert没写它数据压根没落库。我一般改完代码最后都会去数据库查一条新记录确认SQL层面真的生效。5.3 给货物列表加Excel导出用POI三分钟见效导出功能是所有管理系统里被问得最多的加分项。在Java后端用Apache POI写一个导出接口前端放一个导出按钮即可。后端Controller示例RequestMapping(/export) public void export(HttpServletResponse response) throws IOException { // 查出全部货物列表 ListGoods list goodsService.findAll(); // 设置响应头浏览器才会弹出下载框 response.setContentType(application/vnd.ms-excel); response.setHeader(Content-Disposition, attachment;filenamegoods_ System.currentTimeMillis() .xls); // 在内存里创建一个Excel工作簿 Workbook workbook new HSSFWorkbook(); Sheet sheet workbook.createSheet(货物信息); // 表头行 Row header sheet.createRow(0); String[] cols {货物名称, 规格, 库存, 所属仓库}; for (int i 0; i cols.length; i) { header.createCell(i).setCellValue(cols[i]); } // 数据行 for (int i 0; i list.size(); i) { Row row sheet.createRow(i 1); row.createCell(0).setCellValue(list.get(i).getName()); row.createCell(1).setCellValue(list.get(i).getSpec()); row.createCell(2).setCellValue(list.get(i).getStock()); row.createCell(3).setCellValue(list.get(i).getWarehouseName()); } workbook.write(response.getOutputStream()); }HSSFWorkbook生成的是Excel 2003格式Office和WPS都能打开大学实验室的机器上兼容性最好如果要支持.xlsx改用XSSFWorkbook。Content-Type和Content-Disposition这两个响应头是关键缺一不可少了前端拿不到文件流。POI的jar包在pom.xml里加依赖即可选一个和JDK8兼容的稳定版本就行。这个接口写好之后在Vue页面里放一个按钮直接指向这个接口地址导出就通了。整个过程不到一百行但功能演示时非常显眼。前端部分同样简单在表格工具栏放一个按钮点击后用window.open或location.href指向导出接口就行el-button typeprimary clickexportData导出Excel/el-buttonmethods: { exportData() { // 直接让浏览器请求后端导出接口 window.location.href /goods/export; } }后端Content-Disposition响应头会让浏览器自动弹出下载框不用前端做任何文件拼接处理。如果你发现导出文件总是打不开先检查后端有没有报异常再检查响应体里是不是返回了一串JSON错误信息——那说明接口前端路径没对齐被拦截器或权限配置拦下来了。5.4 迁移到答辩机器数据库与war包一起带走答辩前把项目搬到教室电脑是很多人的血泪现场。直接拷贝源码过去再重新编译时间紧容易出事。正确的做法是只带两样东西war包和数据库备份文件。导出数据库mysqldump -u root -p warehouse_db warehouse_backup.sql在答辩机器上先建好同名数据库再导入mysql -u root -p warehouse_db warehouse_backup.sql接着把3-build.bat打出来的war包拷到Tomcat的webapps目录启动Tomcat即可。注意导入之前确认两边的MySQL版本一致5.7的备份导入8.0一般没问题反过来容易踩认证插件坑。最后改jdbc.properties里的账号密码重启一次验证登录页能出就基本稳了。我见过有人在答辩现场重新用IDEA导项目等依赖十分钟只下了三个包。后来再帮人准备答辩机器我都是直接用war包加SQL脚本不现场编译省下的时间都用来过演示流程。6. 答辩前快速验证三十分钟走通入库出库全流程到了答辩前两天不要打开代码对着屏幕发呆直接按业务流走一遍系统用管理员账号登录后台进个人中心确认个人信息展示无误在仓库信息管理里新增一个仓库名称尽量具体比如“一号成品仓”在供应商管理里新增一家供应商填好联系人电话在货物信息管理里新增一种货物给它指定到刚才那个仓库在货物入库管理里为这件货物做一次入库数量填一个不容易算错的值比如5回到货物信息列表确认库存数字变成5在货物出库管理里做一次出库数量3再回货物列表库存应变为2到仓库公告里发一条公告再去前台HTML页面确认能看见。这套流程走完系统最核心的库存链路就被完整验证过了。演示时老师让你“新增一个货物看看”你不要现场新建直接用步骤4里那条现成的演示数据操作避免临时输入中文出错。老师常问的问题集中在三个方面。一是SSM请求流程从浏览器输入URL到页面拿到数据中间经过了哪些类按Controller→Service→Mapper→MySQL的顺序讲清楚再补充SpringMVC的DispatcherServlet。二是事务入库为什么要加Transactional不加会怎样回答库存不一致并说明回滚机制。三是Vue生命周期mounted是干嘛的为什么请求放在这里如果答不上来就说“组件挂载完成后拉取数据避免数据到了页面还没渲染”这是标准答案。三个问题能答上来项目参与度基本就过关了。演示数据这条我的习惯是答辩前一天晚上把所有核心业务数据录好包括两三张入库单、一张出库单、一个公告。录完后用mysqldump导一份备份存到U盘现场万一数据被搞坏了五分钟就能恢复。同时把浏览器里的页面挨个截图按“登录页-列表页-入库-出库”顺序存到手机里现场网络抽风时可以作为兜底。准备一个无痕窗口打开项目避免缓存了旧的登录状态导致演示时跳回登录页。说到缓存这个事我帮人排查过不少“明明改好了演示时还是旧页面”的问题最后发现全是浏览器缓存。从那以后每次现场演示前我都强制走一遍“无痕窗口清缓存重编译war包”的流程宁可多花两分钟也不要当众翻车。希望帮到你。本文还有配套的精品资源点击获取