前置知識
1. 軟件的生命周期
生命周期: 對事物進行定義(描述) -> 創建 -> 使用 -> 銷毀的過程
軟件?命周期中以劃分為可?性研究、需求分析、概要設計、詳細設計、實現、組裝(集成)測試、確認測試、使?、維護、退役10個階段,如下圖:
a. 可?性研究:通過分析軟件開發要求,確定軟件項?的性質、?標和規模,得出可?性研究報告,如果可?性研究報告是可?的,就要制訂詳細的項?開發計劃。此階段交付成果為可?性研究報告(可行性研究報告: 經濟可行性(資金夠不夠), 技術可行性(市面上的技術能否滿足這個需求);
b. 需求分析:是軟件?命周期中重要的也是決定性的?步,通過需求分析才能把軟件功能和性能的總體概念描述為具體的軟件需求規格說明書,為軟件開發奠定基礎,此階段交付成果為軟件需求規格說明書(需求文檔: 用于直到設計, 開發,測試,交付,運維....)
c. 概要設計:根據軟件需求規格說明建?軟件系統的總體結構和模塊間的關系,定義各功能模塊接?,設計全局數據庫或數據結構,規定設計約束,制定組裝(集成)測試計劃;
d. 詳細設計:將各模塊要實現的功能?相應的設計?具詳細的描述出來。(具體的數據流程都要描述清楚,指導開發工作)
e. 實現:寫出正確的、易理解的和易維護的程序模塊。程序員根據詳細設計?檔將詳細設計轉化為程序,完成單元測試;(編碼階段)
f. 組裝測試(集成測試):將經過單元測試的模塊逐步進?組裝和測試;
g. 確認測試:測試系統是否達到了系統要求,按照規格說明書的規定,由??(或在??積極參與
下)對系統進?驗收。必要時,還可以再通過現場測試或并?運?等?法對系統進?進?步測試;
h. 使?:將軟件安裝在??確定的運?環境中,測試通過后移交??使?。在軟件使?過程中,客?和維護?員必須認真收集發現的軟件錯誤,定期或階段性的撰寫軟件問題報告和軟件修改報告;
i. 維護:通過各種必要的維護活動使系統持久的滿???需要;
j. 退役:終?對軟件產品的?持,軟件停?使?。
一個例子: 關于想吃西紅柿炒雞蛋
西紅柿炒雞蛋 | 軟件?命周期 |
想吃且??會做 | 需求產?,可以實現 |
確定?味,分量,其他配菜 | 需求分析,確定功能,規模 |
按?味輕重確定調料多少,按分量確定菜準備多少 | 設計階段 |
開炒 | 開發階段 |
嘗?下?味是否合適,淡了加鹽,咸了加西紅柿 | 測試階段 |
端上桌,開吃 | 部署、使?階段 |
吃完洗碗 | 退役 |
后續我們對對下面幾個階段進行展開:?主要完成需求分析、概要及詳細(系統)設計、實現、單元和集成測試、部署使?這?個階段的任務。
?2. 面向對象
面向過程: 以正在發生的事情為主要目標進行編程
面向對象: 關注的是誰被影響, 使用時調用對象相關的方法
具體面向對象的解釋
? ?種軟件開發的?法,是相對于?向過程來說的。
? 以對象為中?,把相關的數據和?法組織為?個整體并抽象成類,從?更貼近事物的?然運?模
式。
? 在?向對象程序設計中,對象中應該包含數據和動作。
? 在?向對象編程中,其中對象的數據對應表?為屬性,對象的動作表?為?法。
使??向對象?法對系統進?構建主要分為以下?個階段:
1> 面向對象分析(Object-Orienred Analysis OOA)
發?在需求分析階段,解決“做什么”的問題,主要任務是確定對象的屬性與?法,對象與對象之間的關系,各個操作的具體流程,但不考慮系統具體實現有關的因素
2> 面向對象設計(Object-Oriented Design OOD)
發?在系統設計階段,解決的是“怎么做”的問題,其基本思想包括抽象、封裝和可擴展性,其中可擴展性主要通過繼承和多態來實現。主要任務是把實現對象進??程化規范,管理程序內部各部分的相互依賴,為?向對象編程提供指導與依據.(屬性和動作劃分到類里面)
3> 面向對象編程(Object-Oriented Programming OOP)
發?在系統開發階段,使??象對象語?如JAVA,實現OOD模型中的各個成分;OOP的三個主要?標是:重?性,靈活性和擴展性。(把設計出來的東西進行實現)
面向對象的特征: 封裝, 繼承, 多態
?
3. C/S, B/S 架構
? C/S架構即客?端 / 服務器架構模式
? B/S架構即瀏覽器 / 服務器架構模式
CS架構
C/S 架構全稱是客?端 / 服務器(Client / Server)架構,是常?的兩層架構。客?端需要安裝客?端軟件,服務端程序運?在服務器上,提供Socket或數據庫服務。
?
常?于固定??群體中。常?的C/S架構的應?,?如QQ,CCTALK,各種?絡游戲等等,?般需要安裝并且與服務器進??絡通信的都屬于此類。
優點:
? ?部分業務都可以在客?端完成,充分利?本地的計算機資源
? 響應速度快
? 個性化定制能?強
? ?向相對固定的??群,對信息安全的控制能?強
缺點:
? 需要安裝客?端才能使?
? 維護成本?,任何?臺電腦上的客?端出現問題都需要進?維護,升能過程繁瑣
BS架構
B/S架構全稱是瀏覽器 / 服務器(Browser/Server)結構,分為Web瀏覽器、服務器程序、數據庫服務三部分,可以理解為是對C/S架構?種改進,我們此時只需要安裝瀏覽器即可。由于所有的業務邏輯都由服務器程序處理,所以客?端僅使?瀏覽器就可以完成所有操作,??降低了客?端的維護成本。(不像c/s,更新要每個用戶都進行更新)
常?于對公開??提供的?絡服務中。?如常?的?型?站都屬于此類。優點:
? 客?端零維護,只需要安裝?個瀏覽器即可
? 所有業務都集中在服務器端,業務擴展?常?便
? 維護成本低,只需要維護服務器即可
缺點:
? 服務器安全與業務處理能?需要花費很?精?與成本(無法分辨訪問的是普通用戶,還是黑客)
? 不同瀏覽器?持不盡?意(服務器的兼容性)
我們這個項目是基于BS來進行開發的
相關技術及工具
服務端技術
? Spring
? Spring Boot
? Spring MVC
? MyBatis
瀏覽器端技術
? HTML, CSS, JavaScript
? jQuery
? Bootstrap
數據庫
? MySQL
項目構建工具
? Maven
版本控制工具
? Git + GITEE
軟件需求
在軟件?命周期中需求分析是?常重要的?步,在進?需求分析前,先了解?下需求的分類以及如何獲取需求
需求分類
a. 業務需求:指反映企業或客?對系統的?標要求,通常來?與企業內部。(系統要實現最基本的功能)
b. ??需求:描述的是??的具體?標,或??要求系統必須能完成的任務。(主要是用戶提出的需求)
c. 系統需求:從系統?度來說明軟件的需求,包括功能需求(系統必須實現的功能)、?功能需求(?如軟件的質量,可維護性,效率等等)和設計約束(交付時的?些限制條件,?如必須采?國有?主知識產權的數據庫,必須運?在某個操作系統下)等等。
需求獲取
需求獲取(用戶和開發人員的溝通過程)的?式主要有以下?種:
a. ??訪談:最基本的?式。
b. 問卷調查:由于對??進?逐?訪談?較耗時且??時間不?定允許及時參與訪談,所以可以
預先準備問卷調查表讓??填寫,再根據結果進??范圍訪談,可以看做是對??訪談的?種優化。
c. 采樣:對特定種群進?采樣,研究所選出的樣本,得到有?信息。對于信息系統的開發,現在?檔就是采樣種群。
d. 情節串聯板:通過?系統圖?、幻燈?來進?講解,說明系統應該如何運?
需求分析
獲取需求后,進?具體的需求分析?作,最終形成軟件需求規格說明書(需求文檔)做為向下?個階段交付的成.
需求分析的內容
a. 繪制系統上下?范圍關系圖:?于定義系統與系統外部實體間界限和接?的簡單模型,為需求
確定范圍;
b. 創建??界?原型:可以通過快速開發?具開發?個原型或者通過幻燈?、Flash等演??具制作?個演?原型,甚?可以通過紙筆畫出?些關鍵的界?接??意圖,從?幫助??更好的理解要解決的問題,理解系統;
c. 分析需求的可?性:對獲取到的需求進?成本、性能和技術實現??的可?性研究,以及是否與其他的需求存在沖突,是否有對外部的依賴等;
d. 確定需求的優先級:是制訂迭代計劃的?個重要的依據,可以使?滿意和不滿意指標進?說明。滿意度表?當需求被實現時??的滿意程度,不滿意度表?當需求未被實現時??的不滿意程度;
e. 為需求建?模型:表現形式主要是圖表加上少量的?字描述,圖形化的描述使需求更加清晰、易懂。需求分析模型主要描述系統的數據、功能、??界?和運?的外部?為,并不會涉及軟件的具體實現細節,同時,為后續的軟件設計提供了系統的表?視圖;
f. 創建數據字典:對系統?到的所有數據項和結構進?定義,以確保開發?員使?統?的數據定義(比如自定義的錯誤碼)
面向對象分析(OOA)
????????OOA的基本任務是運??象對象?法,對問題域進?分拆和理解,正確認識事物間的關系,找出描述問題域和系統功能的類和對象,定義它們的屬性和職責(類中的屬性和方法),以及它們之間形成的各種聯系(對象和對象之間的依賴)。
UML統一建模語言
UML(Unified Modeling Language)是?種易于表達、功能強?且普遍適?的建模語?,描述類和類之間的關系,它的作?不限于?持OOA和OOD,還?持從需求分析開始的軟件開發全過程。
UML的重要組成部分:
? 事物:事物也稱為建模元素,包括結構事物、?為事物、分級事物和注釋事物,這些事物是UML模型中最基本的OO構造塊;
? 關系:UML?關系把各個事物結合在?起,主要的關系有:依賴(dependency)(類與類之間的相互注入)、關聯(association)(和依賴差不多一個意思)、泛化(generalization)(父子類的關系)、實現(realization)(實現類和接口的關系);
? 圖:主要包括類圖、對象圖、構件圖、組合結構圖、?例圖、順序圖、通信圖、定時圖、狀態圖、活動圖、部署圖、制品圖、包圖、交互概覽圖等
用例模型
從??的?度來看,他們并不想了解系統的內部結構和設計,他們關?的是系統所能提供的服務,把從??那?獲取的需求記錄下來,進?合成與提煉,從?建??例模型。在OOA?法中,構建?例模型?般需要經歷以下階段分別的,識別參與者、合并需求獲得?例、細化?例描述和調整?例模型,其中前三個階段是必需的
1> 用例圖的元素
?例是?種描述系統需求的?法,在?例圖中,主要包括參與者、?例和通信關聯三種元素:如圖所?
? 參與者:參與者是指存在于系統外部并與系統進?交互的任何事物,既可以是使?系統的??,也可以是其他外部系統和設備等;
? ?例:指在系統中執?的動作,這些動作將?成參與者可?的結果。也就是說?例表?系統所提供的服務(比如論壇系統提供的發布帖子, 刪除帖子這個功能),它定義了系統是如何被參與者所使?,描述的是參與者為了使?系統提供的服務與使?發?的?段對話;
? 通信關聯:表?的是參與者和?例之間的關系(用戶發布了帖子),或者?例與?例之間的關系。箭頭所指?是對話的被動接受者,箭尾所指?是對話的主動發起者,如果不想強調對話中的主動與被動關系,可以使?不帶箭頭的關系實線
2> 識別參與者
參與者是與系統交互的所有事物(和系統相關的角色),不僅可以由?承擔,還可以是其他系統和硬件設備,要注意的是,參與者?定在系統之外,不是系統的?部分。執?系統功能的參與者可能有多個,有主次之分,開發?例的主要?的是找到主要參與者。
可以通過下列問題來幫助分析和發現系統的參與者:誰使?這個系統?誰安裝這個系統?誰啟動這個系統?誰維護這個系統?誰關閉這個系統?哪些系統使?這個系統?誰從這個系統獲取信息?誰為這個系統提供信息?
? 示例:
我們以當前準備開發的論壇系統為例,前期獲取到如下??需求:
? 注冊登錄 使用論壇的普通用戶
? 帖?列表, 發布帖?, 刪除帖?, 回復帖?等功能.? ?系統中的具體功能
? ?持個?主?的展?/編輯, ?持頭像上傳. 系統中的具體功能
? ?持帖?按版塊分類.?系統中的具體功能
? ?持發布圖?表情?系統中的具體功能
? ?持站內私信?系統中的具體功能
? 管理員可以添加/刪除/修改版塊?系統中的具體功能? ? 管理員是特殊用戶
? 管理員可以管理所有帖?
綜合以上需求描述,可以明顯的提到到兩個參與者,?個是管理員,?個是普通??。
3> 合并需求獲得用例
將參與者都找到之后,接下來就要仔細檢查參與者,為每個參與者確定?例。
?先,要將獲取到的需求分配給參與者(哪個角色可以使用系統中的哪些功能),?如,普通??可以進?注冊,登錄,編輯個?信息,發貼?,修改??發的貼?,發站內信等等,管理員不僅可以進?普通??的操作還可以進?版塊管理等等。
其次,進?需求合并操作,并產??例(把需求描述成系統中的具體動體),?如對于帖?來說,可以相關的操作描述成具體的動作如:發布帖?,修改帖?,刪除帖?(這些都是用例),在這?合并為操作帖?。注:?例并不需要包括具體的操作流程(事件流),事件流將在細化?例描述中體現。
然后,將識別到的參與者和合并?成的?例通過?例圖的形式表?出來,?此以獲得?例模型的框架。如下圖所?:
?4> 細化用例描述
?例描述可以迭代完成,先對?些重要的?例編制相對細致的描述,對于那些不重要的?例可以留待以后再補充完成,?例描述通常包括?例名稱、簡要說明、事件流、?功能需求、前置和后置條件、擴展點、優先級。
以操作帖??例中的發布帖?為例,有如下描述:
1. ?例名稱 | 發布帖? |
2. 簡要說明 | ??發布新帖,同時增加對應版塊帖?數量 |
3. 事件流 | 1. ??向系統發出發布新貼請求 2. 系統展?編輯新帖界? 3. ??選擇對應的版塊類別,寫?帖?標題與正?,并提交 4. 系統檢查版塊類別、標題、正?是否有效 5. 系統將所輸?的信息存儲建檔,帖?發布成功? (主要描述這個用例的執行過程) |
4. 備選事件流 | ? |
5. ?功能需求 | ?特殊要求 |
6. 前置條件 | ??必須登錄系統進?權限校驗 |
7. 后置條件 | 修改對應版塊下帖?的數量,修改??發帖數 |
8. 擴展點 | ? |
9. 優先級 | 最?(滿意度5,不滿意度5) |
針對以上?例細化描述?例可知,??發貼前要對登錄狀態進?檢查,發貼操作中包含?份檢驗,?份檢查在其他操作中也都會涉及,所以我們抽象出?個?份檢驗的?例,使??例圖描述?例之間的關系如下所?:
分析模型?
1> 定于概念類
概念類:模型中可以代表事物與概念的對象。(java中的類, 也就是數據庫中的表)
OOA的主要任務就是找到系統中的對象和類,這些類將反映到OOD中的軟件類和OOP中具體的實現類。
發現類的?式有很多種,其中應?最?泛的是名詞短語法,具體步驟如下:
? 閱讀和理解需求?檔或?例描述
? 篩選出名詞或名詞短語,建?初始類清單(候選類)
? 將候選類分為三類:分別是顯?易?的類,明顯?意義的類和不確定類別的類
? 舍棄明顯?意義類別的類
? ?組討論不確定類別的類,直到把他們合并或調整到其他兩個類別。
根據之前按的內容,發布帖??例的事件流,可以獲取到候選概念類的清單,如下:
名詞類別 | 概念類列表 |
顯?易?的類 | ??,帖?,版塊 (最終得到三個概念類) |
?意義的類 | 系統,界?,信息 |
不確定類別的類 | 版塊類別,版塊帖?數量,帖?標題,帖?正?,權限 |
?經過簡單分析:“版塊類別” 和 “版塊帖?數量” 都可以歸結到 “版塊” 類,做為 “版塊” 類的屬性;“帖?標題” 和 “帖?正?” 都可以歸結到 “帖?” 類,做為 “帖?” 類的屬性;“權限” 可以歸結到 “??”類,做為“??”類的屬性。?此,針對發布帖?這個?例,就確定了三個類,分別是:??、版塊、帖?。
2> 確定類之間的關系
當完成了類的尋找?作之后,就是理清這些類之間的關系,類之間的關系有:關聯、依賴、泛化、聚合、組合和實現,他們在UML中的表??式如下:
? 關聯關系:提供不同類的對象之間的結構關系,?不是類與類之間的關系,兩個對象之間?般以動詞連接,?如,??-發布-帖?;可以??個箭頭連接,表?關聯關系對象可以從?個端得到另?端對象,如果沒有箭頭,認為是?個雙向關系或是?個未定義的關聯;(司機 駕駛 汽車 可以使用->)(張三 聊天 李四 沒有箭頭)
? 依賴關系:兩個類A 和 B,如果B變化可能會引起A的變化,則稱類A依賴與B,?如,?個類另?個類的數據成員,?個類是另?個類的某個操作的參數等;(Spring DI Controller 依賴 Service 依賴 DAO)
? 聚合關系:共享聚集關系通常簡稱為聚合關系,他表?了類之間整體與部分的關系,“部分”可以屬于不同的“整體”,“部分”與“整體”的?命周期可以不同,?如,汽?和?輪就是聚合關系,?個汽有?多個輪?,汽?壞了,輪?還可以?,輪了壞了可以再換?個;
? 組合關系:組合聚集關系通常簡稱為組合關系,他也表?了類之間整體與部分的關系,與聚合關系的區別在于,組合關系中的“部分”只能屬于?個“整體”,“部分”與“整體”的?命周期相同,?如:?個公司有多個部?,他們之間就是組合關系,公司?旦倒閉,部分也就不存在了;
? 實現關系:描述的是類和接?之間的關系(實現類),?個類可以實現接?中聲明的?法;
? 泛化關系:描述的是?類與?類之間的關系,繼承關系是泛化關系的反關系,也就是說?類繼承了?類,??類是?類的泛化。
對于??發布帖?的?例,在確定類與類之間關系之后,可以?UML的類圖把這些關系記錄下來,如下圖所?:??發布帖?,帖?聚合成版塊,版本組成了論壇
?
3> 為類添加職責?
在找到概念類并且理清了他們之間的關系后,就可為類添加職責(為類添加屬性和方法),主要包括兩??內容:
? 類所維護的知識,即成員變量或屬性
? 注意要保持屬性的簡單性,即:只定義與系統責任和?標相關的屬性;使?簡單數據類型定義;不為類關聯定義屬性。(屬性和類強相關)
? 類能夠執?的?為,即成員?法或責任
? 可以根據動詞來判斷,再進?篩選,與識別類的過程類似。
這個階段只找出?些主要的、明顯、與業務規則相關的部分,切忌在這個階段不斷地細化
根據分析得出的類的職責,?類圖表?如下:
論壇系統的類圖, 用戶 模塊 板塊 之間的類圖關系
這?根據??、帖?、版塊的關系?類圖做?個簡單的?例,詳細設計將在項?開發章節按每個功能需求分別演?
建立交互圖
多個對象的?為通常采?交互圖來表?,UML中最常?的是順序圖,?乎可以?在任何系統的場景。
順序圖的基本元素有對象、參與者、?命線、激活框、消息和消息線,其中消息是順序圖的靈魂。以??登錄過程為例,使?順序圖描述如下:
各個元素
軟件需求規格說明書(需求分析階段的成果)
通過識別參與者、合并需求獲取?例、細化?例描述、定義概念類、確定類之間的關系、為類添加職責、建?交互圖等步驟,已經完成了需求的定義,并把現實世界中的事物抽象成了?向對象中的類,同時也確定了系統的主要功能和范圍,上述的?作是編寫軟件需求規格說明書的基礎,只要這些需求匯總起來就形成了軟件需求規格說明書中的需求部分。
軟件需求規格說明書做為需求分析階段交付的成果,對系統設計與系統開發有重要的指導意義,它的具體組成部分,如:范圍、引??件、需求、合格性規定、需求可追蹤性、尚未解決的問題、注解、附錄等有關內容的詳細介紹:?國家標準|GB/T 8567-2006
?系統設計
技術選型
?標:確定技術平臺以及開發和部署相關?具及版本(統一開發環境, 測試環境, 生產環境相關依賴的版本)
類別 | 描述 |
構架 | 基于MVC構架,實現前后端分離 |
編碼格式 | UTF-8 |
前后端交互數據格式 | JSON |
JDK版本 | JDK17 |
服務器端技術 | SpringBoot 2.7.6 Spring MVC MyBaits Start 2.3.0 |
瀏覽器端技術 | HTML, CSS, JavaScript jQuery3.x Bootstrap |
數據庫 | MySQL8.0 |
項?構建?具 | Maven 3.8.x |
版本控制?具 | Git 2.36.0 及以上 + GITEE |
開發?具 | IntelliJ IDEA社區版 2022.1.3 |
API?檔?成?具 | Swagger Springfox 3.0.0 |
設計數據庫實體
通過需求分析獲得概念類并結合業務實現過程中的技術需要,設計出數據庫實體
數據庫設計
數據庫名: forum_db
公共字段:?特殊要求的情況下,每張表必須有?整型的?增主鍵,刪除狀態、創建時間、更新時間,如下所示:
刪除操作不是真正的刪除而是把state通過update語句從0 -> 1
表的設計
運?分析模型章節中定義概念類的?法,能過觀察現在的論壇并結合具體業務需要完成類的定義
1. 確定論壇中的類 對應到數據庫中的表
第一個類: 用戶類
第二個類: 帖子
第三個類: 板塊
第四個類: 帖子的回復
第五個類: 站內信
2. 為類確定屬性?
要求: 與類強相關, 可以用簡單類型去表示
1> 用戶類: 用戶名(登錄用的), 昵稱(在論壇中顯示), 密碼(在數據庫中存明文還是密文(MD5->各種字符的組合生成一個字典->生成MD5字符串->生成一個以密文為Key,明文為Value的哈希表)), 頭像地址, 是否為管理員, 發帖數, 郵箱地址, 注冊日期,電話, 個人簡介,鹽值(隨機字符)(?關于為什么有了昵稱還要用戶名, 是為了防止黑客通過昵稱猜到我們的用戶名
因為簡單的md5密文也會不安全, 因此我們需要使用隨機字符和明文拼接然后進行md5加密
2> 板塊類: 板塊名, 排序, 板塊下的帖子數量
3> 帖子: 作者ID (需要和用戶表建立關聯關系), 發布時間, 訪問次數, 點贊次數, 回復次數,帖子標題, 正文, 板塊ID (需要和板塊表建立關聯關系)
4> 帖子回復: 回復用戶Id(需要和用戶表建立關聯關系), 回復內容, 回復時間, 主貼的ID (需要和帖子表建立關聯關系)
5> 站內信(發私信): 發送者用戶ID(需要和用戶表建立關聯關系), 接收者用戶ID(需要和用戶表建立關聯關系), 內容, 發送時間
1> 用戶表: t_user
3> 板塊表: t_board
4> 帖子表: t_article
5> 帖子回復表: t_ariticle_reply
6> 站內信表: t_message
創建數據庫的sql語句
注意: 編寫sql的時候, 把字段名從文檔中復制出來, 盡量不要用手寫
# 創建數據庫
drop database if exists forum_db_001;
create database forum_db_001 character set utf8mb4 collate utf8mb4_general_ci;
# 選擇數據庫
use forum_db_001;# 創建表
# 用戶表
drop table if exists t_user;
create table t_user (id bigint primary key auto_increment comment '編號,主鍵自增',username varchar(20) not null unique comment '用戶名,唯一',password varchar(32) not null comment '加密后的密碼',nickname varchar(50) not null comment '昵稱',phoneNum varchar(20) comment '手機號',email varchar(50) comment '電子郵箱',gender tinyint not null default 2 comment '性別 0女,1男,2保密',salt varchar(32) not null comment '為密碼加鹽',avatarUrl varchar(255) comment '用戶頭像路徑',articleCount int not null default 0 comment '發帖數量',isAdmin tinyint not null default 0 comment '是否管理員 0否,1是',remark varchar(1000) comment '備注,自我介紹',state tinyint not null default 0 comment '狀態 0正常,1禁言',deleteState tinyint not null default 0 comment '是否刪除,0否,1是',createTime datetime not null comment '創建時間,精確到秒',updateTime datetime not null comment '更新時間,精確到秒'
);# 版塊表
drop table if exists t_board;
create table t_board (id bigint primary key auto_increment comment '編號,主鍵自增',name varchar(50) not null comment '版塊名',articleCount int not null default 0 comment '帖子數量',sort int not null default 0 comment '排序優先級,升序',state tinyint not null default 0 comment '狀態 0正常,1禁用',deleteState tinyint not null default 0 comment '是否刪除,0否,1是',createTime datetime not null comment '創建時間,精確到秒',updateTime datetime not null comment '更新時間,精確到秒'
);# 帖子表
drop table if exists t_article;
create table t_article (id bigint primary key auto_increment comment '編號,主鍵自增',boardId bigint not null comment '編號,主鍵自增',userId bigint not null comment '發帖人,關聯用戶編號',title varchar(100) not null comment '帖子標題',content text not null comment '帖子正文',visitCount int not null default 0 comment '訪問量',replyCount int not null default 0 comment '回復數',likeCount int not null default 0 comment '點贊數',state tinyint not null default 0 comment '狀態 0正常,1禁用',deleteState tinyint not null default 0 comment '是否刪除,0否,1是',createTime datetime not null comment '創建時間,精確到秒',updateTime datetime not null comment '更新時間,精確到秒'
);# 帖子回復表
drop table if exists t_article_reply;
create table t_article_reply (id bigint primary key auto_increment comment '編號,主鍵自增',articleId bigint not null comment '關聯帖子編號',postUserId bigint not null comment '樓主用戶,關聯用戶編號',replyId bigint comment '關聯回復編號,支持樓中樓',replyUserId bigint comment '樓主下的回復用戶編號,支持樓中樓',content varchar(500) not null comment '回貼內容',likeCount int not null comment '回貼內容',state tinyint not null default 0 comment '狀態 0正常,1禁用',deleteState tinyint not null default 0 comment '是否刪除,0否,1是',createTime datetime not null comment '創建時間,精確到秒',updateTime datetime not null comment '更新時間,精確到秒');# 站內信表
drop table if exists t_message;
create table t_message (id bigint primary key auto_increment comment '編號,主鍵自增',postUserId bigint not null comment '發送者,關聯用戶編號',receiveUserId bigint not null comment '接收者,關聯用戶編號',content varchar(255) not null comment '內容',state tinyint not null default 0 comment '狀態 0正常,1禁用',deleteState tinyint not null default 0 comment '是否刪除,0否,1是',createTime datetime not null comment '創建時間,精確到秒',updateTime datetime not null comment '更新時間,精確到秒'
);-- 寫入版塊信息數據
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES
(1, 'Java', 0, 1, 0, 0, '2023-06-25 10:25:55', '2023-06-25 10:25:55');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES
(2, 'C++', 0, 2, 0, 0, '2023-06-25 10:25:56', '2023-06-25 10:25:56');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES
(3, '前端技術', 0, 3, 0, 0, '2023-06-25 10:25:56', '2023-06-25 10:25:56');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES
(4, 'MySQL', 0, 4, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES (5, '面試寶典', 0, 5, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES (6, '經驗分享', 0, 6, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES
(7, '招聘信息', 0, 7, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES (8, '福利待遇', 0, 8, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
INSERT INTO `t_board` (`id`, `name`, `articleCount`, `sort`, `state`, `deleteState`, `createTime`, `updateTime`) VALUES (9, '灌水區', 0, 9, 0, 0, '2023-06-25 19:05:22', '2023-06-25 19:05:22');
?軟件開發
搭建環境
確定JDK 版本為 17
確定MySQL版本為8.0
或者: select version();
檢查 Maven
安裝maven: 3.8以上
JDK17+maven下載安裝,settings.xml文件配置_jdk17下載地址-CSDN博客
顯示
修改一些maven的鏡像, 并且xml下修改respority的路徑
<mirror><id>aliyun-public</id><mirrorOf>*</mirrorOf><name>aliyun public</name><url>https://maven.aliyun.com/repository/public</url></mirror><mirror><id>aliyun-central</id><mirrorOf>*</mirrorOf><name>aliyun central</name><url>https://maven.aliyun.com/repository/central</url></mirror><mirror><id>aliyun-spring</id><mirrorOf>*</mirrorOf><name>aliyun spring</name><url>https://maven.aliyun.com/repository/spring</url></mirror>
把你ideal下面的maven也修改一下
此時就是
檢查GITEE
git --version
安裝插件
Spring Boot Helper 創建Spring Boot 工程
?于創建Spring Boot 項?,由于插件最新版本是收費的,這?我們下載他的歷史免費版本,但是對Idea的版本有限制,注意插件和Idea版本要匹配
插件地址:Spring Boot Helper - IntelliJ IDEs Plugin | Marketplace
要錢,我找了個激活碼:?https://web.52shizhan.cn/paid-activate-code 去這里付費27塊錢可以永久使用
安裝lombok
?于?持lombok語法
創建gitee倉庫
獲取地址
創建一個空項目, 然后進入cmd, 輸入命令
git clone https://gitee.com/li_xiao_bai111/form.git
然后就會發現空目錄下出現了gitee
創建工程
在剛剛創建gitee的目錄下我們創建工程
其他的設置:
a. 修改編碼格式為UTF-8: Settings --> Edit --> File encodings?
b. 檢查或配置代碼?動補全功能: Settings --> Edit --> General --> code completion
c. 檢查或配置?動導包:Settings --> Edit --> General --> auto import
d. 檢查或配置Maven,可以?國內倉庫鏡像:Settings --> Build, Execution & Deployment --
> Build Tools --> Maven
e. idea識別Maven項?:在Notifications視圖中會提?Load Maven Project,點擊即可。
開啟熱部署
修改代碼后不需要重啟
勾選下面的選項
在maven下面加入下面配置
<properties><!--jdk版本號--><java.version>17</java.version><!-- 編譯環境JDK版本 --><maven.compiler.source>${java.version}</maven.compiler.source><!-- 運?環境JVM版本 --><maven.compiler.target>${java.version}</maven.compiler.target><!-- 構建項?指定編碼集 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
?配置yml/properties文件
spring:application:name: 論壇系統output:ansi:enabled: ALWAYS # 控制臺輸出彩??志
server:port: 8080 #自定義的服務端口號#日志信息
logging:level:root: info # 日志的默認級別org.xiaobai.forum: debug # 指定包下的日志級別file:path: D:/forum_system/log # 日志保存路徑pattern: MM-dd-HH:mm:ss #日期顯示格式
測試
訪問問指定的接口