設(shè)計全解析:從數(shù)據(jù)庫設(shè)計到部署避坑)
做畢業(yè)設(shè)計選“基于SSM的蛋糕私人訂制網(wǎng)站”這個題目的同學(xué)十有八九會經(jīng)歷這樣一個過程看標題覺得簡單就是一個網(wǎng)上賣蛋糕的商城嘛真動手的時候才發(fā)現(xiàn)光一個“私人訂制”需求就能讓訂單表、購物車邏輯和后臺審核全鏈路都跟著變復(fù)雜。更別提SSM三件套的整合、前端頁面的交互、部署到服務(wù)器之后的配置問題。這個項目我前前后后帶人做過不止五六個版本源碼和LW文檔也整理過完整的一套今天就把整個項目的設(shè)計思路、核心代碼、數(shù)據(jù)庫表關(guān)系、以及最容易踩的坑一次說清楚。這篇內(nèi)容既適合正在選畢業(yè)設(shè)計題目的同學(xué)用來評估工作量也適合已經(jīng)拿到這個題目、正卡在SSM整合或定制訂單流程上的朋友照著落地。1. 整體設(shè)計思路先搞清楚“蛋糕私人訂制”和“普通商城”的差別1.1 核心需求解析私人訂制到底定制了哪些東西很多同學(xué)拿到題目就急著建表、寫登錄注冊結(jié)果做到一半發(fā)現(xiàn)“私人訂制”四個字沒落地答辯的時候被老師一問就露餡。所以第一步必須先把“訂制”兩個字拆清楚。普通蛋糕商城和私人訂制網(wǎng)站表面上看都是“用戶選蛋糕、下單、付款、商家發(fā)貨”但實際的需求深度完全不同。普通商城是“我有什么你買什么”蛋糕的尺寸、口味、款式全部是預(yù)設(shè)好的SKU私人訂制是“你想要什么我按需求給你做”用戶傳一張喜歡的蛋糕圖片上來或者勾選奶油類型、蛋糕尺寸、裱花文字、配送時間商家在后臺看到訂單后還要進行人工確認和報價溝通。這個過程意味著系統(tǒng)里至少要多出三個非常關(guān)鍵的模塊定制信息的收集模塊表單要能錄入尺寸、口味、奶油、水果、文字內(nèi)容、參考圖等個性化字段并且這些字段不能寫死因為用戶的需求五花八門。訂單審核和狀態(tài)機定制訂單不能像普通訂單那樣直接“付款—發(fā)貨”必須增加“待確認”“已確認”“制作中”“配送中”“已完成”這樣的狀態(tài)流轉(zhuǎn)后臺要有審核操作入口價格也可能需要后臺修改。圖片上傳與展示用戶定制時上傳參考圖后臺管理端要能查看和審核項目里必須處理MultipartFile文件上傳。所以在寫需求分析的時候這三塊內(nèi)容就是你文檔里最值錢的部分。你不需要把系統(tǒng)功能寫得天花亂墜但必須把“私人訂制”這條業(yè)務(wù)主線從頭串到尾用戶能定制什么、定制信息怎么流轉(zhuǎn)、商家怎么處理定制請求、最終訂單怎么完成閉環(huán)。1.2 技術(shù)選型為什么用SSM而不是Spring Boot每次有同學(xué)問我“老師現(xiàn)在外面公司都在用Spring Boot為什么畢業(yè)設(shè)計還要用SSM”我的回答都是一樣的這個題目的訓(xùn)練重點恰恰在SSM上。Spring Boot自動配置把很多底層細節(jié)藏起來了你寫完一個接口根本不知道DispatcherServlet怎么初始化、MyBatis的SqlSessionFactory怎么注入、事務(wù)代理什么時候生效而SSM讓你必須自己手寫applicationContext.xml、spring-mvc.xml、mybatis-config.xml把這些配置全部理順之后你對框架的理解深度完全不在一個級別。當(dāng)然純粹從開發(fā)效率角度講SSM確實比Spring Boot繁瑣依賴版本容易沖突、配置文件多、環(huán)境變量處理麻煩。但作為畢業(yè)設(shè)計SSM方案有一個很現(xiàn)實的優(yōu)勢參考資料極多網(wǎng)上“SSM框架整合”“SSM畢設(shè)源碼”這類資源一搜一大把項目卡住了容易查而且Spring、SpringMVC、MyBatis三者使用范圍極廣面試被問到的概率也遠高于Spring Boot某個自動配置類。所以這個題目用SSM與其說是技術(shù)選型不如說是訓(xùn)練價值、參考資料、答辯友好度三者權(quán)衡之后的最優(yōu)解。技術(shù)棧版本方案我建議直接用最經(jīng)典的一版Spring 5.1.x SpringMVC 5.1.x MyBatis 3.4.x MySQL 5.7 Maven構(gòu)建 JSP/Bootstrap前端。JDK用1.8Tomcat用8.5或9.0。這套組合在所有教學(xué)資料里出鏡率最高遇到報錯最容易搜到解決方案。2. 數(shù)據(jù)庫設(shè)計蛋糕訂制系統(tǒng)的表結(jié)構(gòu)如何拆2.1 核心表與字段設(shè)計詳解數(shù)據(jù)庫設(shè)計是整個蛋糕私人訂制網(wǎng)站的重中之重。我習(xí)慣先畫ER圖再建表因為答辯老師第一眼看的就是你的ER圖和外鍵關(guān)系。建議把表拆成八張用戶表、蛋糕分類表、蛋糕信息表、購物車表、定制訂單表、訂單明細表、評論表、輪播圖表。如果還想要管理端后臺就加一張管理員表。用戶表t_user核心字段包含用戶ID、用戶名、密碼MD5加密存儲、手機號、郵箱、頭像、注冊時間、狀態(tài)。密碼加密這一點在文檔里要寫清楚不要明文存密碼至少用MD5有能力可以加鹽。蛋糕分類表t_category很簡單就是分類ID、分類名稱、排序字段比如生日蛋糕、婚禮蛋糕、節(jié)慶蛋糕。蛋糕信息表t_cake才是重點除了蛋糕ID、分類ID外要包含蛋糕名稱、價格、主圖路徑、多圖路徑、蛋糕描述、標簽如“適合2-5人”、推薦狀態(tài)、上架狀態(tài)、銷量。定制訂單表t_order是整個數(shù)據(jù)庫的核心表。字段不能少訂單編號、用戶ID、蛋糕ID、定制尺寸6寸/8寸/10寸、口味奶油/水果/巧克力、奶油類型、裱花文字、配送時間、參考圖片路徑、定制備注、訂單金額、實付金額、訂單狀態(tài)、下單時間、支付時間、發(fā)貨時間、完成時間。這里要注意定制信息字段很多同學(xué)喜歡全塞在“備注”字段里這樣做數(shù)據(jù)庫設(shè)計檔次一下就矮了文檔答辯都吃虧。所有定制項都應(yīng)該單獨設(shè)字段這樣才能寫清楚“用戶定制了什么”。訂單明細表t_order_item用于記錄訂單中具體購買的商品快照信息商品名稱、商品價格、數(shù)量、小計。為什么要有快照因為蛋糕價格或名稱后期會改訂單記錄要保留下單那一刻的信息不能關(guān)聯(lián)到最新數(shù)據(jù)。這一點寫進設(shè)計說明里老師會覺得你是真懂業(yè)務(wù)的。評論表t_comment關(guān)聯(lián)用戶和蛋糕字段有內(nèi)容、評分、評論時間、是否匿名。輪播圖表t_banner則放圖片路徑、跳轉(zhuǎn)鏈接、排序、狀態(tài)。2.2 表關(guān)系與業(yè)務(wù)閉環(huán)怎么畫表關(guān)系是ER圖的核心表達內(nèi)容用戶和訂單是1對N蛋糕分類和蛋糕是1對N蛋糕和訂單明細是1對N訂單和訂單明細是1對N用戶和評論是1對N蛋糕和評論是1對N。購物車表可以做成獨立表cart_id、user_id、cake_id、quantity、selected也可以做成臨時存儲不用表來存但建議做成表因為“登錄后加入購物車”這個功能在演示和答辯時最能出效果。訂單狀態(tài)是業(yè)務(wù)閉環(huán)的主鏈路。我建議用整數(shù)狀態(tài)碼0待確認、1已確認待付款、2配送中、3已完成、4已取消。簡單解釋一下流程用戶在定制頁填寫完信息→生成待確認狀態(tài)的訂單→管理員后臺看到新訂單認為可以接單修改價格并確認→用戶支付畢業(yè)設(shè)計一般不用真實支付可以做成余額支付或“模擬支付”按鈕→后臺設(shè)置配送中→用戶確認收貨或后臺點擊完成→整條鏈路結(jié)束。這個狀態(tài)機設(shè)計好之后前后臺幾乎所有功能都是圍繞它展開的所以數(shù)據(jù)庫設(shè)計階段一定要把狀態(tài)字段想明白。最后補充一個設(shè)計技巧所有表都要加上創(chuàng)建時間字段create_time和更新時間字段update_time一方面業(yè)務(wù)上需要另一方面讓答辯老師看到你的表設(shè)計有工程意識。輪播圖模塊不要忽略網(wǎng)站上首頁大圖輪播是拍視頻和截圖時的加分項代碼量不大但效果直觀。3. 核心業(yè)務(wù)實現(xiàn)從登錄到定制下單的全流程3.1 基礎(chǔ)設(shè)施搭建SSM最常見整合套路SSM整合說難也難說簡單也簡單關(guān)鍵是記住一條主線Spring管理業(yè)務(wù)對象Service、SpringMVC負責(zé)Web請求分發(fā)Controller、MyBatis負責(zé)數(shù)據(jù)庫讀寫Mapper。配置上就是三件事spring配置文件把所有Service和Mapper交給Spring容器spring-mvc配置文件把Controller交給SpringMVC容器mybatis配置文件把SQL和實體映射做好。我用Maven管理依賴關(guān)鍵依賴如下spring-webmvc、spring-jdbc、mybatis、mybatis-spring、mysql-connector-java、druid連接池、jackson-databind、jstl、commons-fileupload、lombok如果不想寫getter/setter。依賴版本建議直接用maven倉庫里兼容性最穩(wěn)的版本不要追求最新。web.xml需要配置三件事Spring容器監(jiān)聽器ContextLoaderListenerSpringMVC前端控制器DispatcherServlet并指定加載spring-mvc.xml以及一個字符編碼過濾器CharacterEncodingFilter解決中文亂碼。核心過濾器和DispatcherServlet的url-pattern用“/”這樣REST風(fēng)格接口和JSP頁面才能正確路由。spring-mvc.xml的配置里記得開注解驅(qū)動配置視圖解析器InternalResourceViewResolver的前綴后綴配置資源映射放行static目錄下的CSS/JS/圖片配置multipartResolver處理文件上傳。spring配置文件里開component-scan掃描service包配置DataSource、SqlSessionFactoryBean掃描mapper.xml和別名包、MapperScannerConfigurer掃描mapper接口以及很重要的事務(wù)管理器并用tx:annotation-driven驅(qū)動注解事務(wù)。這一套配置配好并跑通一個最簡單的“查數(shù)據(jù)庫輸出列表”功能整個項目的地基就算打完了。很多同學(xué)整合失敗的原因通常是包掃描路徑寫錯、依賴缺失、maven編譯沒刷新這類問題多看控制臺報錯基本都能定位。我建議第一步不要急著寫業(yè)務(wù)代碼先把一個“查詢分類列表”的接口跑通鏈路通了再往上蓋樓就快了。3.2 用戶登錄注冊與權(quán)限控制蛋糕私人訂制網(wǎng)站有用戶端和管理員端兩個角色所以登錄注冊模塊要做兩套用戶登錄入口在首頁頂部管理員登錄入口建議放在單獨的管理端路徑下不要混在一起。用戶注冊時密碼用MD5加密然后存入數(shù)據(jù)庫登錄成功后將用戶信息封裝到Session里后續(xù)通過攔截器判斷是否登錄。在SSM里實現(xiàn)登錄攔截建議用HandlerInterceptorpreHandle方法先放行l(wèi)ogin、register、靜態(tài)資源、首頁、蛋糕列表這些公開URL其他用戶中心、購物車、訂單管理相關(guān)路徑統(tǒng)統(tǒng)攔截未登錄就重定向到登錄頁。管理員端單獨配一個攔截器判斷session里管理員對象是否存在。權(quán)限控制這塊是答辯必問點為什么不直接用Filter老師的意圖不是非要你解釋攔截器和過濾器的全部區(qū)別而是考察你有沒有現(xiàn)成的權(quán)限控制方案。能在答辯時清楚說“用戶端用攔截器校驗用戶登錄管理端單獨校驗管理員身份兩個攔截器分離”就足夠了。這里要提醒一句攔截器注冊時excludePathPatterns放行的路徑必須寫全尤其是靜態(tài)資源很多同學(xué)沒配置好導(dǎo)致CSS全丟了。文件上傳也是私人訂制網(wǎng)站的標配功能。在SpringMVC里配置CommonsMultipartResolvermaxUploadSize限制大小例如10MBController方法接收MultipartFile參數(shù)保存時用UUID生成新文件名防止重名和亂碼存到指定上傳目錄再把相對路徑存到數(shù)據(jù)庫。圖片存儲路徑建議直接存在項目的webapp/upload目錄下這樣瀏覽器訪問時路徑簡單部署到服務(wù)器也方便遷移。上傳后前端用img標簽回顯后臺管理端也要能預(yù)覽用戶定制時上傳的參考圖。3.3 定制下單核心流程購物車到訂單的實現(xiàn)細節(jié)蛋糕私人訂制網(wǎng)站最核心的流程是這樣的用戶瀏覽蛋糕列表→點擊某個蛋糕進入詳情頁→詳情頁底部有“立即定制”按鈕→進入定制表單頁→填寫定制信息和數(shù)量→加入購物車或者直接提交訂單→購物車中可批量提交→生成等待確認的訂單。兩種方式建議都做購物車功能在演示和答辯時非常出彩我強烈建議不要只做“立即定制下單”把購物車做成獨立頁面會更有體系感。購物車實現(xiàn)有兩種方案一種是把購物車數(shù)據(jù)結(jié)構(gòu)存Session里另一種持久化到t_cart表。我推薦存數(shù)據(jù)庫原因有兩個用戶清瀏覽器Session后購物車數(shù)據(jù)不丟演示更穩(wěn)定表結(jié)構(gòu)能寫進數(shù)據(jù)庫設(shè)計文檔內(nèi)容更豐富。購物車表關(guān)聯(lián)用戶、蛋糕、數(shù)量、選中狀態(tài)。加入購物車時先判斷該用戶是否已經(jīng)有這個蛋糕的記錄有就加數(shù)量沒有就新增一條記錄。提交訂單的時候要注意事務(wù)管理。一個訂單至少操作兩張表插入t_order主表包含全部定制信息同時把購物車里選中的商品逐條寫入t_order_item。兩件事必須放在同一個事務(wù)里用Transactional注解否則會出現(xiàn)訂單主表有記錄、明細表空掉的數(shù)據(jù)不一致問題。生成訂單號可以直接用時間戳加隨機數(shù)格式類似“202506181545321234”保證唯一即可。定制訂單提交后用戶端的訂單列表顯示成“待確認”狀態(tài)。為什么不是“待付款”因為定制蛋糕商家要確認能不能做、價格是否有調(diào)整狀態(tài)機設(shè)計成“待確認→已確認→配送中→已完成”更符合真實業(yè)務(wù)。后臺管理端在訂單管理列表里能看到所有待確認訂單點詳情查看定制字段和參考圖后可以修改訂單價格并點擊“確認接單”此時用戶端訂單狀態(tài)變?yōu)椤按犊睢痹冱c“模擬支付”變?yōu)椤耙阎Ц洞谱鳌薄:笈_制作完成后點“配送中”用戶確認收貨后訂單完成。這一套狀態(tài)流轉(zhuǎn)邏輯把所有功能模塊串起來配合訂單狀態(tài)流轉(zhuǎn)圖代碼里可以用狀態(tài)字段控制來寫文檔和做演示整個系統(tǒng)一體性非常強。3.4 后臺管理蛋糕上下架與訂單審核頁面管理員端的核心頁面建議做成獨立iframe風(fēng)格后臺左側(cè)菜單樹右側(cè)內(nèi)容區(qū)。菜單包括分類管理、蛋糕管理、訂單管理、用戶管理、評論管理、輪播圖管理。蛋糕管理里要支持新增、編輯、上架、下架、上傳多張圖片分類管理支撐蛋糕分類的增刪改查訂單管理是最重要的頁面列表里展示訂單狀態(tài)點擊詳情能看到用戶填寫的全部定制信息還能處理“確認訂單”“修改價格”操作評論管理可以做一個審核刪除輪播圖管理就是維護首頁大圖。后臺的表格展示建議用分頁插件PageHelper這個插件在SSM項目里幾乎是標配引入依賴后在MyBatis配置xml里加上分頁插件配置調(diào)用PageHelper.startPage(pageNum, pageSize)返回的列表再用PageInfo包裝就能輕松實現(xiàn)分頁。后臺適配Bootstrap自帶的表格樣式顏色不要花哨一深一淺配一個高亮按鈕色就夠了。管理端登錄入口我建議放在“/admin/login”和數(shù)據(jù)頁面在同一套SpringMVC中分離路徑攔截器也好配。整個管理端設(shè)計不需要炫技但工作量和功能完整度一定要在演示時讓老師看得見。4. 常見問題排查與避坑經(jīng)驗4.1 高頻報錯速查表SSM項目開發(fā)中你會反復(fù)遇到一些固定報錯這里直接把最容易遇到的整理成一個排查表遇到問題對著查就行問題現(xiàn)場根本原因解決方案頁面全亂碼、中文變問號JSP頁面編碼、請求編碼、數(shù)據(jù)庫連接URL至少有一處不是UTF-8統(tǒng)一設(shè)置pageEncodingUTF-8web.xml加CharacterEncodingFilter數(shù)據(jù)源URL加characterEncodingutf8項目啟動直接404DispatcherServlet的url-pattern配置錯誤或SpringMVC掃描的包路徑不對檢查web.xml確認spring-mvc.xml里component-scan能掃到controller包MyBatis報BindingExceptionMapper接口沒有掃描到或者namespace和接口全限定名不一致檢查applicationContext.xml的MapperScannerConfigurer包路徑確認xml的namespace和接口路徑完全一致Service事務(wù)不生效數(shù)據(jù)一半成功一半失敗spring配置里沒有配事務(wù)管理器或者Service方法被內(nèi)部類調(diào)用繞過了代理添加DataSourceTransactionManager配置tx:annotation-driven確保Transactional加在public方法上圖片上傳不成功秒報400form表單缺少enctypemultipart/form-data或multipartResolver沒配置給form加enctype在spring-mvc.xml配CommonsMultipartResolver并設(shè)置大小上限JSP頁面EL表達式原樣輸出web.xml是Servlet 2.5版本導(dǎo)致EL默認關(guān)閉升級web.xml頭文件版本到3.1或4.0或檢查isELIgnored配置項目能跑但CSS/JS全無樣式靜態(tài)資源被DispatcherServlet攔截在spring-mvc.xml配置mvc:resources映射把/static/**等路徑放行Maven依賴沖突tomcat啟動NoClassDefFoundError多個版本的jar同時存在或依賴重復(fù)使用mvn dependency:tree檢查沖突統(tǒng)一版本號4.2 真正值得留意的三個工程級細節(jié)普通的報錯按表排查基本都能解決但有幾個坑是新手反復(fù)踩、還要在答辯時被追問的我重點說一下。第一個是數(shù)據(jù)庫連接池配置問題。很多同學(xué)直接用一個簡單的DriverManager連接后臺一刷新并發(fā)一大頁面就卡死。建議直接用Druid連接池配置初始化連接數(shù)、最大連接數(shù)SQL監(jiān)控頁面還能在答辯時演示“如何查看SQL執(zhí)行耗時”這比CV四個框架配置話術(shù)要有說服力得多。第二個是文件上傳的路徑問題。本地開發(fā)時你把圖片存到D:盤某個路徑一旦部署到服務(wù)器或者換電腦就訪問不到。穩(wěn)妥的做法是把上傳目錄配置成項目下webapp/upload用相對當(dāng)前項目的路徑保存同時數(shù)據(jù)庫只存相對路徑而不是絕對路徑。這樣整個項目哪怕打包成war再部署圖片也不會丟。第三個是訂單編號生成和并發(fā)問題。有些同學(xué)直接用一個時間戳當(dāng)訂單號看似沒問題但答辯老師如果問到“兩個用戶同一毫秒下單怎么辦”答不上來就很尷尬。改進方案是用時間戳加自增序列或者UUID雖然畢業(yè)設(shè)計場景下不會真的并行下單但你的方案要有并發(fā)意識。類似的還有庫存扣減問題做蛋糕項目庫存概念不強但如果后面擴展了普通商品SKU就要考慮超賣問題至少提一句“用數(shù)據(jù)庫樂觀鎖或行鎖控制并發(fā)扣減”這是加分項。5. 配套LW文檔寫作除了代碼文檔才是畢業(yè)設(shè)計的半壁江山5.1 文檔結(jié)構(gòu)怎么安排最合理LW文檔畢業(yè)論文/設(shè)計說明書是畢業(yè)設(shè)計的重要組成部分很多同學(xué)代碼寫得不錯文檔卻東拼西湊、沒有邏輯。結(jié)合這個題目的特點我建議文檔按以下結(jié)構(gòu)組織緒論背景意義、國內(nèi)外研究現(xiàn)狀、論文結(jié)構(gòu)需求分析功能性需求、非功能性需求、用例圖系統(tǒng)設(shè)計總體架構(gòu)、功能模塊、數(shù)據(jù)庫設(shè)計、ER圖系統(tǒng)實現(xiàn)各模塊核心功能實現(xiàn)截圖與描述、核心代碼展示系統(tǒng)測試測試方法、測試用例表、測試結(jié)論總結(jié)與展望。數(shù)據(jù)庫設(shè)計部分重點寫你的ER圖和數(shù)據(jù)字典。數(shù)據(jù)字典不要把所有表的每個字段都長篇大論地羅列挑關(guān)鍵表定制訂單表、蛋糕信息表、用戶表做一個詳細字段說明即可其他表做個匯總表格。需求分析部分的用例圖可以用工具畫也可以手畫但要清晰。系統(tǒng)實現(xiàn)部分要配合截圖每個核心功能一張圖截圖下加一段說明文字格式統(tǒng)一。最容易暴露“文檔是抄的”的一個地方就是系統(tǒng)實現(xiàn)部分。很多人的代碼功能和截圖對不上老師看得多了就能看出來。正確做法是每個功能模塊的說明都嚴格按照你項目的實際路徑和頁面截圖去寫。比如實現(xiàn)定制訂單這個功能先貼定制表單頁面的截圖再貼Controller代碼截一小段關(guān)鍵代碼就行再貼生成訂單后的列表頁截圖說明文字寫清楚“該模塊通過URL xxx進入前端表單將定制參數(shù)封裝到Order對象Controller調(diào)用OrderService.insertOrder方法完成訂單插入與明細插入使用事務(wù)保證一致性”。邏輯能自洽文檔就不會被挑刺。5.2 答辯準備把系統(tǒng)實現(xiàn)講成一個完整故事答辯是在驗收你的“業(yè)務(wù)理解”不是聽你念代碼。準備5到8分鐘的演示流程就夠了不用把所有頁面都點一遍。我的建議是開場先講系統(tǒng)整體功能然后馬上切到定制流程的演示——從用戶登錄、搜索蛋糕、點進詳情、進入定制頁、填寫定制信息、上傳參考圖、加入購物車、提交訂單這時翻到后臺把訂單確認狀態(tài)推進再回到用戶端看到訂單狀態(tài)變化。這樣一整個閉環(huán)演示下來老師對你系統(tǒng)的完整度印象會非常深刻。老師大概率會追問的問題有SSM為什么比單體JSPServlet更清晰數(shù)據(jù)庫哪些表的關(guān)系是一對多的訂單狀態(tài)是怎么設(shè)計的上傳的圖片存在哪事務(wù)在哪個方法上生效權(quán)限控制怎么做的這些問題在本文前面的設(shè)計里基本都講到了你只要把狀態(tài)機的整數(shù)定義、文件上傳路徑、Transactional的落點這幾點背熟基本都能答上來。最忌諱的是項目做完不知道自己的核心類叫什么、配置文件有幾個這種低級問題答不上來才是真正的硬傷。6. 部署上線與演示環(huán)境準備6.1 本地打包部署全流程很多同學(xué)項目寫完了最后在部署環(huán)節(jié)翻車。最穩(wěn)妥的做法是用Maven打成war包丟到Tomcat的webapps目錄下啟動。項目開發(fā)階段你在IDEA里右鍵Run Tomcat沒問題但最終演示建議用獨立Tomcat war包的方式出了環(huán)境問題方便排查。步驟建議照著做第一步在pom.xml里設(shè)置打包方式為war并配置maven-war-plugin避免web.xml找不到第二步修改數(shù)據(jù)庫連接配置確保是5.7版本能用的驅(qū)動、URL、賬號密碼第三步Maven執(zhí)行clean package觀察構(gòu)建是否成功如果報缺依賴或者Java編譯錯誤先修復(fù)第四步把生成的war包復(fù)制到Tomcat的webapps目錄啟動bin/startup.batWindows或startup.sh看日志有沒有Deploy成功的輸出第五步瀏覽器訪問http://localhost:8080/項目名/測試登錄、定制下單、后臺審核全流程。部署階段有個高頻坑數(shù)據(jù)庫賬號密碼忘了改本地IDEA能跑是因為你在IDEA里連的是本地數(shù)據(jù)庫但Tomcat啟動的war包默認讀取的也是同一個配置文件理論上沒問題但如果你把war發(fā)給別人測試一定要把SQL文件一并給出去并寫清楚MySQL版本、需要導(dǎo)入的數(shù)據(jù)庫名。演示前最好把自己電腦上的服務(wù)全部啟動好瀏覽器清理緩存SQL文件重新導(dǎo)入一遍到干凈的庫避免歷史臟數(shù)據(jù)干擾演示效果。6.2 演示前的數(shù)據(jù)準備與話術(shù)準備演示時的數(shù)據(jù)很重要。數(shù)據(jù)庫里不要只有兩條測試數(shù)據(jù)至少準備12個以上的蛋糕商品覆蓋三個分類每個蛋糕都要配上圖片評論至少準備五六條最好還有一個狀態(tài)正在流轉(zhuǎn)中的定制訂單。首頁輪播圖放三張尺寸合適的蛋糕大圖這會大大提升系統(tǒng)的視覺效果。定制訂單數(shù)據(jù)準備時要覆蓋多個狀態(tài)待確認的、已確認的、配送中的、已完成的這樣演示時可以快速切換狀態(tài)不用現(xiàn)場在生產(chǎn)環(huán)境里新增。另外演示前一定要預(yù)先設(shè)計演示腳本。寫清楚每一步點什么、引導(dǎo)語怎么說然后彩排兩遍。演示的時候不要邊想邊點容易卡殼。常見操作順序我已經(jīng)在5.2里講過了你可以直接拿來編排。最后再準備一個小技巧演示的時候把瀏覽器縮放比例調(diào)成90%或80%這樣頁面顯示完整屏幕錄制或者截屏都會更好看別問我怎么知道的都是踩過的坑。