【《一個(gè)基于springboot2.0框架的圖書(shū)管理系統(tǒng)(BMS)設(shè)計(jì)》9000字(論文)】_第1頁(yè)
【《一個(gè)基于springboot2.0框架的圖書(shū)管理系統(tǒng)(BMS)設(shè)計(jì)》9000字(論文)】_第2頁(yè)
【《一個(gè)基于springboot2.0框架的圖書(shū)管理系統(tǒng)(BMS)設(shè)計(jì)》9000字(論文)】_第3頁(yè)
【《一個(gè)基于springboot2.0框架的圖書(shū)管理系統(tǒng)(BMS)設(shè)計(jì)》9000字(論文)】_第4頁(yè)
【《一個(gè)基于springboot2.0框架的圖書(shū)管理系統(tǒng)(BMS)設(shè)計(jì)》9000字(論文)】_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

頁(yè)第1章緒論1.1課題的研究背景伴隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的飛速進(jìn)步,幾乎絕大部分行業(yè)都與之產(chǎn)生了不同程度的融合。利用計(jì)算機(jī)技術(shù)尤其是計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)服務(wù)于我們的生產(chǎn)生活成為更加便捷的重要方式。而書(shū)籍是記錄人類(lèi)歷史和生活的主要方式,是人類(lèi)學(xué)習(xí)文化和習(xí)讀歷史的重要途徑,隨著通過(guò)網(wǎng)絡(luò)娛樂(lè)和學(xué)習(xí)的人們的數(shù)量正在不斷增加,像圖書(shū)館和實(shí)體書(shū)店等一系列信息資源的充足,包涵了巨大的信息數(shù)據(jù)資源的場(chǎng)所,人工管理的優(yōu)勢(shì)越來(lái)越不明顯,利用網(wǎng)絡(luò)技術(shù)來(lái)管理這些復(fù)雜的書(shū)籍信息數(shù)據(jù),正在取代傳統(tǒng)的記錄方式和學(xué)習(xí)途徑。網(wǎng)絡(luò)和實(shí)體相結(jié)合,相輔相成,相互促進(jìn),簡(jiǎn)化管理,節(jié)約成本,能獨(dú)特的、全面的凸顯其優(yōu)越性,也使web技術(shù)的應(yīng)用管理繁瑣事務(wù)成為一種新的可能。現(xiàn)有的圖書(shū)管理系統(tǒng)使用的技術(shù)多種多樣,達(dá)到的效果也各有異同,而本系統(tǒng)是一個(gè)基于編程語(yǔ)言java中相對(duì)流行的集成開(kāi)發(fā)框架,前后端不分離的網(wǎng)站系統(tǒng),分模塊、分層次進(jìn)行代碼的編寫(xiě),更有利于進(jìn)行維護(hù)工作。經(jīng)過(guò)對(duì)軟件需求的分析,將傳統(tǒng)的管理規(guī)范抽象到系統(tǒng)開(kāi)發(fā)中,并加以完善。所以本系統(tǒng)應(yīng)該能夠?yàn)橛脩?hù)提供一個(gè)不易丟失數(shù)據(jù)存儲(chǔ)倉(cāng)庫(kù),取代傳統(tǒng)的借閱和管理方式,代替管理平日里最基本的工作,節(jié)約人力、無(wú)力、財(cái)力。相比較而言圖書(shū)管理系統(tǒng)擁有效率高、不容易疏漏、利于查找、更新、維護(hù)等特點(diǎn),對(duì)于學(xué)生和圖書(shū)館工作人員有很大的幫助。1.2課題的研究意義在經(jīng)過(guò)一系列調(diào)查和研究發(fā)現(xiàn),現(xiàn)階段校內(nèi)外的圖書(shū)管理、借閱的方式仍然利用管理人員或者一些可以進(jìn)行自助登記的機(jī)器集中進(jìn)行,雖然已存在一些圖書(shū)管理系統(tǒng),但是由于其使用的開(kāi)發(fā)技術(shù)和設(shè)計(jì)模式使其操作復(fù)雜、軟件維護(hù)存在一定的困難,在圖書(shū)的管理規(guī)模日漸龐大,導(dǎo)致職員的負(fù)擔(dān)加重,物力的耗費(fèi)、經(jīng)濟(jì)的浪費(fèi)時(shí),如若開(kāi)發(fā)一種通過(guò)網(wǎng)頁(yè)進(jìn)行圖書(shū)的系列操作,使用當(dāng)前企業(yè)開(kāi)發(fā)常用的集成框架開(kāi)發(fā)系統(tǒng),模塊化程度更好,層次分明,使其在替代老舊的工作方式或者作為輔助系統(tǒng)發(fā)揮作用時(shí),能夠更加在低成本的情況下,更容易的進(jìn)行維護(hù)。以便提供更有秩序、穩(wěn)定、實(shí)時(shí)的服務(wù),實(shí)現(xiàn)工作和日常使用的分散處理,一定程度上簡(jiǎn)化了步驟、提高了效率。 第2章可行性研究與需求分析2.1可行性分析2.1.1技術(shù)可行性分析本系統(tǒng)的性質(zhì)為前后端不分離通過(guò)web網(wǎng)頁(yè)訪(fǎng)問(wèn)的圖書(shū)管理系統(tǒng),結(jié)合現(xiàn)存類(lèi)似的管理系統(tǒng)所應(yīng)用的技術(shù)與當(dāng)前所使用的計(jì)算機(jī)硬件配置,通過(guò)對(duì)現(xiàn)有技術(shù)的學(xué)習(xí)和總結(jié)。故,結(jié)合多種框架開(kāi)發(fā)出一個(gè)功能相對(duì)完善的圖書(shū)管理系統(tǒng)在技術(shù)上是可行的。2.1.2經(jīng)濟(jì)可行性分析首先,數(shù)據(jù)庫(kù)和用戶(hù)在數(shù)量上規(guī)模較小,開(kāi)發(fā)本系統(tǒng)使用的資源,人力、設(shè)備、財(cái)力等勞動(dòng)、物質(zhì)資源需求不多,個(gè)人通過(guò)一定的時(shí)間完全可以完成,而且基本上不需要耗費(fèi)人力物力,顯然在經(jīng)濟(jì)上完全可行。2.1.3操作可行性分析本系統(tǒng)的操作方式,如果是僅僅面向?qū)W生和老師,完全是便捷可行的,如果是其他人員,必要情況下,提供一定的使用說(shuō)明,大多數(shù)情況下,系統(tǒng)本身面對(duì)的使用者所在的組織機(jī)構(gòu)和網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的適應(yīng)程度,在社會(huì)當(dāng)前階段已經(jīng)足夠的普及和流行,系統(tǒng)性能、系統(tǒng)設(shè)計(jì)的所有操作完全是可行的。2.2需求分析2.2.1功能需求經(jīng)過(guò)實(shí)際考察和分析,圖書(shū)管理系統(tǒng)應(yīng)該概括為兩個(gè)方面,相應(yīng)需要能實(shí)現(xiàn)以下主要功能:用戶(hù)方面:●登錄功能:通過(guò)提交到后臺(tái)的表單實(shí)現(xiàn)用戶(hù)的登錄驗(yàn)證?!褡?cè)功能:后端代碼對(duì)數(shù)據(jù)加工然后向數(shù)據(jù)庫(kù)提交保存用戶(hù)信息,注冊(cè)成功后可以實(shí)現(xiàn)登錄。●查詢(xún):可以查詢(xún)書(shū)籍信息和個(gè)人信息。●借閱:能夠借閱書(shū)籍。●歸還:可以歸還書(shū)籍。●個(gè)人信息維護(hù):可以維護(hù)個(gè)人信息。●檢索:通過(guò)書(shū)名和書(shū)的編號(hào)檢索指定的書(shū)籍記錄。管理員方面:●登錄功能:通過(guò)提交到后臺(tái)的表單實(shí)現(xiàn)管理員的登錄驗(yàn)證?!褡?cè)功能:此功能應(yīng)該通過(guò)初始管理員控制基本用戶(hù)權(quán)限調(diào)整完成●查詢(xún):可以查詢(xún)用戶(hù)、個(gè)人、書(shū)籍的相關(guān)信息?!裆霞埽耗軌蛱砑訒?shū)籍?!裣录埽耗軌騽h除書(shū)籍和其相關(guān)?!裨黾樱耗軌蛱砑幽硞€(gè)用戶(hù)。●修改:可以修改某個(gè)用戶(hù)信息。●刪除:可以刪除某個(gè)用戶(hù)信息。●檢索:通過(guò)學(xué)號(hào)或者姓名檢索出指定的學(xué)生記錄、通過(guò)書(shū)名和書(shū)的編號(hào)檢索指定的書(shū)籍記錄。2.2.2其他需求性能需求:系統(tǒng)本身開(kāi)發(fā)和運(yùn)行所需的響應(yīng)時(shí)間、信息傳輸速率、安全性等方面現(xiàn)有條件完全可以滿(mǎn)足。2.3確立生命周期模型根據(jù)需求分析的結(jié)果,系統(tǒng)規(guī)模不大,故計(jì)劃使用快速原型模型去規(guī)劃系統(tǒng)的開(kāi)發(fā)周期,迅速搭建環(huán)境,構(gòu)建可以運(yùn)行的基本系統(tǒng),完成最終系統(tǒng)的一個(gè)子系統(tǒng),通過(guò)一邊編寫(xiě)一邊調(diào)試的形式,能夠在短時(shí)間內(nèi)拿到大量反饋,并通過(guò)使用者與系統(tǒng)交互的反饋?zhàn)龅骄€(xiàn)性開(kāi)發(fā),過(guò)程中增加用戶(hù)的參與程度,逐步提高用戶(hù)體驗(yàn),這樣可以減少在開(kāi)發(fā)過(guò)程中出現(xiàn)后續(xù)階段需要改寫(xiě)前面階段所犯錯(cuò)誤,導(dǎo)致開(kāi)發(fā)方向偏離需求主干的可能性,開(kāi)發(fā)者可以了解到系統(tǒng)應(yīng)該做什么,不應(yīng)該做什么,在設(shè)計(jì)和開(kāi)發(fā)階段發(fā)生錯(cuò)誤的可能性被大大降低,減少發(fā)生環(huán)節(jié)退回修改的可能。通過(guò)與用戶(hù)交互原型系統(tǒng)已經(jīng)得到驗(yàn)證,據(jù)此產(chǎn)生的評(píng)價(jià)信息,能夠很好補(bǔ)充需求分析,系統(tǒng)開(kāi)發(fā)進(jìn)度得到加快。2.4概念模型(E-R圖)由用戶(hù)的功能需求,確定概念模型,用于描述與用戶(hù)相關(guān)的數(shù)據(jù),以實(shí)體-聯(lián)系圖的形式表現(xiàn)出來(lái)。事實(shí)上,憑借人的思維簡(jiǎn)單的判斷就能夠使實(shí)體和它的屬性在現(xiàn)實(shí)世界中得以劃分開(kāi)來(lái)。例如:一棵樹(shù)的屬性有:種類(lèi)、年限、地域分布等等;種類(lèi)在數(shù)據(jù)字典中,數(shù)據(jù)的結(jié)構(gòu)、數(shù)據(jù)的序列和數(shù)據(jù)的存儲(chǔ)都是一些屬性字段有意義的集合,劃分在這里就已經(jīng)被體現(xiàn)出來(lái)。但是定義E-R圖不僅僅需要簡(jiǎn)單的劃分,調(diào)整也十分有必要。為了簡(jiǎn)化E-R圖的處置,保持屬性或者字段的函數(shù)依賴(lài)和使其具有無(wú)損連接性。調(diào)整一般遵循:1)客觀(guān)現(xiàn)實(shí)世界事物主體如果可以被抽象為屬性的話(huà),一般不作為實(shí)體對(duì)待。2)一個(gè)屬性,不能擁有任何屬性字段,即屬性作為一項(xiàng)數(shù)據(jù)獨(dú)立存在依附于它的實(shí)體,且是不可再劃分的。屬性不能同除了屬性依附的實(shí)體之外具有聯(lián)系。所以,圖書(shū)管理系統(tǒng)應(yīng)當(dāng)涉及二個(gè)實(shí)體。用戶(hù):(記錄編碼,用戶(hù)名,真實(shí)姓名,性別,密碼,學(xué)生學(xué)號(hào),專(zhuān)業(yè)班級(jí),角色權(quán)限)書(shū)籍:(記錄編碼,書(shū)籍名稱(chēng),作者,書(shū)籍編號(hào),數(shù)量)實(shí)體之間的聯(lián)系為:●一個(gè)學(xué)生可以借閱多本書(shū)籍。●一種書(shū)籍最少有1本以上可以被多個(gè)學(xué)生反復(fù)借閱、歸還,若用戶(hù)為管理員,則可以管理圖書(shū)的入庫(kù)(上架)、出庫(kù)(下架)、控制數(shù)量等操作。用戶(hù)與書(shū)籍之間具有多對(duì)多的聯(lián)系。為了規(guī)范化數(shù)據(jù),避免插入異和刪除異常的出現(xiàn),將范式的級(jí)別適當(dāng)?shù)慕档停员WC用戶(hù)訪(fǎng)問(wèn)時(shí)的穩(wěn)定和操作的正確性,將其中大部分?jǐn)?shù)據(jù)冗余性問(wèn)題和插入、刪除異常問(wèn)題交于編碼階段的業(yè)務(wù)邏輯開(kāi)發(fā)時(shí)處理。根據(jù)用戶(hù)的觀(guān)點(diǎn)做概念模型的抽象,并對(duì)數(shù)據(jù)進(jìn)行信息建模,作為數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)的初態(tài)。

第3章總體設(shè)計(jì)3.1開(kāi)發(fā)環(huán)境和開(kāi)發(fā)技術(shù)本系統(tǒng)是基于web技術(shù)網(wǎng)頁(yè)系統(tǒng),主要通過(guò)網(wǎng)頁(yè)訪(fǎng)問(wèn)頁(yè)面,由用戶(hù)或者管理員進(jìn)行服務(wù)器的交互。圖書(shū)管理系統(tǒng)采用企業(yè)開(kāi)發(fā)中常用的設(shè)計(jì)模式,相對(duì)主流的java集成框架和UI框架,力求實(shí)現(xiàn)簡(jiǎn)約的訪(fǎng)問(wèn)界面,利于維護(hù)的代碼結(jié)構(gòu)和模塊層級(jí),相對(duì)嚴(yán)格的權(quán)限管理。3.1.1環(huán)境集成環(huán)境開(kāi)發(fā)工具(系統(tǒng)運(yùn)行環(huán)境):Windows10+IDEA+JDK+maven版本:-IDEA2019.3、JDK1.8、maven3.3.9技術(shù)組合:后端:SpringBoot+SpringMVC+Mybatis+shiro版本:SpringBoot2.4.5(集成SpringMVC)、Mybatis2.1.4、shiro1.4.1數(shù)據(jù)庫(kù):MySQL版本:8.0.23前端UI:SemanticUI框架+Thymeleaf模板引擎版本:SemanticUI2.4、Thymeleaf3.0.11插件:Lombok+DevTools版本Lombok1.18.20、DevTools2.4.53.1.2開(kāi)發(fā)技術(shù)說(shuō)明1)MVC模型采用MVC模型分層、分模塊化編寫(xiě)代碼以提高系統(tǒng)的模塊化程度,降低維護(hù)的難度和耦合度,提高代碼復(fù)用的程度和優(yōu)化整體架構(gòu)。經(jīng)典MVC模型中Model是指業(yè)務(wù)模型代表業(yè)務(wù)邏輯規(guī)則。業(yè)務(wù)邏輯規(guī)則是在不同種類(lèi)的系統(tǒng)中各不相同,是由開(kāi)發(fā)者或者開(kāi)團(tuán)隊(duì)現(xiàn)實(shí)在開(kāi)發(fā)中確定,在維護(hù)和測(cè)試過(guò)程中還會(huì)對(duì)有問(wèn)題的部分模塊做出修改。在該模型無(wú)論何種類(lèi)型的參數(shù)的傳遞都可以封裝成Key-Value鍵-值對(duì)形式(即便是同一參數(shù)類(lèi)型形成的列表)的集合,在web頁(yè)面系統(tǒng)開(kāi)發(fā)中執(zhí)行請(qǐng)求的處理與接口的封裝等事務(wù)。View是指用戶(hù)所能看到的各種視圖,主要是將數(shù)據(jù)顯示到用戶(hù)所能看到的頁(yè)面,在它應(yīng)該在地方的顯示,而MVC模型能夠?yàn)楣芾硐到y(tǒng)處理不同視圖,視圖單單作為一個(gè)顯示的工具,既不會(huì)對(duì)數(shù)據(jù)進(jìn)行封裝、加工,也不會(huì)對(duì)其進(jìn)行保存和儲(chǔ)留。controller控制器通常起到一個(gè)鏈接的作用,不會(huì)對(duì)數(shù)據(jù)做任何操作,只負(fù)責(zé)拿到請(qǐng)求并選擇那個(gè)模型、模塊或者方法去處理請(qǐng)求,把用戶(hù)的請(qǐng)求轉(zhuǎn)成針對(duì)Model的操作,操作完成后轉(zhuǎn)到對(duì)應(yīng)視圖中去顯示。如果一個(gè)系統(tǒng)架構(gòu)是基于MVC模型構(gòu)建的,具有良好的項(xiàng)目架構(gòu)設(shè)計(jì),是大多數(shù)Web應(yīng)用的理想選擇。2)Mybatis與Druid數(shù)據(jù)庫(kù)連接池MyBatis框架用于持久層的處理,作為一個(gè)輕量級(jí)的框架,它幾乎避免了JDBC全部的配置和代碼以及結(jié)果集的獲取。而且只要簡(jiǎn)單的XML文件或java注解來(lái)映射和配置對(duì)數(shù)據(jù)庫(kù)的CRUD等操作的原生信息,java實(shí)體類(lèi)映射到數(shù)據(jù)中的一條或多條表項(xiàng)。這樣一來(lái)后端開(kāi)發(fā)時(shí)可以將SQL語(yǔ)句集中寫(xiě)在XML配置文件中,同時(shí)配備了一種語(yǔ)法可以根據(jù)不同的條件生成不同的SQL語(yǔ)句。即動(dòng)態(tài)SQL,所謂的動(dòng)態(tài)SQL,本質(zhì)還是SQL語(yǔ)句,只是在SQL層面,去執(zhí)行一個(gè)邏輯代碼。如果使用連接池,數(shù)據(jù)庫(kù)的鏈接、分工、管理和釋放包括事務(wù)管理等等全部交由連接池處理,它會(huì)在系統(tǒng)運(yùn)行期間提供給一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象,而且這個(gè)對(duì)象可以重復(fù)使用。并且它可以通過(guò)配置控制數(shù)據(jù)庫(kù)連接的時(shí)長(zhǎng)。在系統(tǒng)開(kāi)始運(yùn)行時(shí),數(shù)據(jù)庫(kù)會(huì)有一個(gè)連接作為一個(gè)對(duì)象被以緩存的形式置于內(nèi)存之中,若有需要查詢(xún)SQL等請(qǐng)求訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)的相關(guān)操作已被托管,轉(zhuǎn)成調(diào)用連接池中已經(jīng)創(chuàng)建的等待使用的對(duì)象。3)shiro權(quán)限框架ApacheShiro是一個(gè)Java安全框架,用于執(zhí)行登錄判斷、角色授權(quán)、請(qǐng)求攔截、緩存、Web集成和會(huì)話(huà)管理等。Shiro框架有三個(gè)核心組件Subject(主題),SecurityManager(安全管理器)和Realms(真實(shí)用戶(hù))。subject組件:它的作用在于拿到當(dāng)前用戶(hù)對(duì)象,這個(gè)對(duì)象是可以與Shiro交互的任何東西。 SecurityManager組件:SecurityManager作為shiro安全框架的核心組件,它的功能是管理Subject,還有所有與shiro的交互都有它負(fù)責(zé)。 Realm組件:這個(gè)組件負(fù)責(zé)給Shiro框架提供相關(guān)的安全數(shù)據(jù)(例如:角色,權(quán)限等)。Shiro框架除了上面三個(gè)核心組件之外,它還包括:authorizer組件:它的本質(zhì)上是對(duì)訪(fǎng)問(wèn)請(qǐng)求的控制——控制某個(gè)系統(tǒng)中的用戶(hù)可以訪(fǎng)問(wèn)的內(nèi)容(資源、網(wǎng)頁(yè)等)。authenticator組件:此組件用于驗(yàn)證用戶(hù)。這個(gè)驗(yàn)證過(guò)程的一般是熟悉的“用戶(hù)/密碼”組合。當(dāng)大多數(shù)用戶(hù)在登錄時(shí),Shiro通常會(huì)使用自身配置的令牌去支持它。當(dāng)令牌被拿出來(lái)驗(yàn)證時(shí),用戶(hù)提供的密碼如果與存儲(chǔ)在系統(tǒng)中的密碼相匹配,則這個(gè)用戶(hù)會(huì)被認(rèn)為已經(jīng)完成登錄認(rèn)證。sessionmanager組件:在安全框架領(lǐng)域,Shiro框架提供給想做會(huì)話(huà)應(yīng)用程序的開(kāi)發(fā)人員統(tǒng)一的會(huì)話(huà)API,會(huì)話(huà)API可以選擇在任何層調(diào)用,而不僅僅是servlet或ejbmec。cachemanager組件:提供緩存支持。3.2系統(tǒng)流程設(shè)計(jì)給出用戶(hù)從登陸到注銷(xiāo)整個(gè)系統(tǒng)的執(zhí)行的流程,以及其中每個(gè)分支或者說(shuō)每個(gè)頁(yè)面做何處理會(huì)產(chǎn)生什么結(jié)果。圖書(shū)管理系統(tǒng)的程序流程圖如下:3.3數(shù)據(jù)庫(kù)設(shè)計(jì)與實(shí)現(xiàn)根據(jù)需求分析階段概念模型中所描述的實(shí)體、對(duì)應(yīng)的屬性、實(shí)體之間的聯(lián)系,抽象為邏輯模型并且使用結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL在Mysql數(shù)據(jù)庫(kù)中實(shí)現(xiàn):1)新建連接2)新建數(shù)據(jù)庫(kù)名:labtest3)新建查詢(xún),編寫(xiě)結(jié)構(gòu)查詢(xún)語(yǔ)言,生成用戶(hù)表、書(shū)籍表、借閱表:用戶(hù)表:CREATETABLE`test_student`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`username`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`stuname`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`sex`int(11)DEFAULTNULLCOMMENT'性別1男2女3未知',`password`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`stuid`int(11)DEFAULTNULL,`classes`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'班級(jí)',`role`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE,KEY`id`(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=37DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;書(shū)籍表:CREATETABLE`test_book`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`auth`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULL,`book_id`int(11)NOTNULL,`count`int(11)DEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=43DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;借閱表:CREATETABLE`test_brrow`(`book_id`bigint(20)DEFAULTNULL,`stu_id`bigint(20)DEFAULTNULL,`borrow_date`datetimeDEFAULTNULL,KEY`boid_sid`(`stu_id`)USINGBTREE,KEY`boid_bid`(`book_id`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciROW_FORMAT=DYNAMIC;3.4創(chuàng)建項(xiàng)目、搭建環(huán)境3.4.1環(huán)境與配置通過(guò)IDEA開(kāi)發(fā)工具創(chuàng)建一個(gè)SpringInitializr(項(xiàng)目初始化向?qū)В?,選擇JAVA軟件開(kāi)發(fā)工具包JDK版本,選擇MAVEN項(xiàng)目,自定義包路徑名com.xjz和項(xiàng)目名mytest,選擇web應(yīng)用場(chǎng)景的stater;創(chuàng)建完成后,配置maven倉(cāng)庫(kù),導(dǎo)入網(wǎng)頁(yè)的靜態(tài)資源。在application.yml加入數(shù)據(jù)庫(kù)連接池的相關(guān)配置(數(shù)據(jù)庫(kù)連接源的配置),pom文件中導(dǎo)入DevTools、lombok插件依賴(lài)。application.yml所有配置如下:spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/labtest?serverTimezone=GMT&characterEncoding=utf-8username:rootpassword:981122type:com.alibaba.druid.pool.DruidDataSource#自定義數(shù)據(jù)源#SpringBoot屬性值綁定#druid數(shù)據(jù)源專(zhuān)有配置initialSize:5minIdle:5maxActive:20maxWait:60000timeBetweenEvictionRunsMillis:60000minEvictableIdleTimeMillis:300000validationQuery:SELECT1FROMDUALtestWhileIdle:truetestOnBorrow:falsetestOnReturn:falsepoolPreparedStatements:true #配置filters和日志記錄等f(wàn)ilters:stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize:20useGlobalDataSourceStat:trueconnectionProperties:druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500#關(guān)閉模板引擎緩存thymeleaf:cache:falseserver:port:8080#mybatisconfigmybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.xjz.pojoconfiguration:map-underscore-to-camel-case:true3.4.2生成架構(gòu)根據(jù)MVC架構(gòu)在com.xjz包下創(chuàng)建config、controller、dao、pojo、service子包,以便于分層、分模塊處理。每個(gè)子包的功能為:config:使用shiro安全框架和原生Spring攔截器配置角色權(quán)限管理、攔截頁(yè)面和放行資源。它的作用在于,在不設(shè)置游客登錄的情況下,如若在不登錄的狀態(tài)下進(jìn)入首頁(yè)或者其他頁(yè)面,與數(shù)據(jù)庫(kù)的操作是矛盾的。另外,放行必要的js、css、html等靜態(tài)資源也是必要的。controller:整個(gè)業(yè)務(wù)邏輯模塊的流程交由Controller層來(lái)控制,但其中的眾多控制器只負(fù)責(zé)拿到視圖層的請(qǐng)求,接收相應(yīng)的數(shù)據(jù),并對(duì)數(shù)據(jù)做一定的封裝。pojo:pojo實(shí)際上是java的實(shí)體類(lèi),一個(gè)實(shí)體類(lèi)的某個(gè)變量(屬性)與數(shù)據(jù)庫(kù)表中的屬性字段(數(shù)據(jù)項(xiàng))相對(duì)應(yīng),作用是負(fù)責(zé)暫時(shí)存儲(chǔ)持久層中得到數(shù)據(jù)記錄或者將封裝進(jìn)實(shí)體類(lèi)數(shù)據(jù)信息傳進(jìn)持久層。dao:Dao層作為持久層的管理者,它處理的應(yīng)該是java對(duì)象與數(shù)據(jù)庫(kù)表的關(guān)系相互轉(zhuǎn)換的工作,然后模塊調(diào)用Dao提供的接口時(shí)可以不用關(guān)心此接口的具體實(shí)現(xiàn)類(lèi)是哪個(gè)類(lèi),直接實(shí)現(xiàn)相關(guān)數(shù)據(jù)業(yè)務(wù)的處理即可。例如:Mybatis框架,在項(xiàng)目就充當(dāng)著DAO的作用。而Mybatis框架提供mapper文件和接口之間的映射能力,Sql語(yǔ)句或者動(dòng)態(tài)SQL語(yǔ)句直接寫(xiě)在XML文件中,實(shí)現(xiàn)了代碼與Sql分離,降低耦合度。Service:Service層以同樣的方式設(shè)計(jì)接口,對(duì)參數(shù)進(jìn)行一定的封裝然后調(diào)用Dao層;然后將調(diào)用到層的結(jié)果返回Controller層。項(xiàng)目結(jié)構(gòu)圖如下:3.4.2生成實(shí)體類(lèi)編寫(xiě)屬性變量與前端的請(qǐng)求變量和數(shù)據(jù)庫(kù)表字段屬性相對(duì)應(yīng)的實(shí)體類(lèi)并且使用lombok插件提供的注解@Data、@AllArgsConstructor、@NoArgsConstructor自動(dòng)生成get、set、ToString方法、無(wú)參構(gòu)造函數(shù)和有參構(gòu)造函數(shù):SearchBooks.java:用于接收和返回前端所需要檢索的book的ID或者名稱(chēng)關(guān)鍵字SearchStudent.java:用于接收和返回前端所需要檢索的學(xué)生的ID或者姓名關(guān)鍵字UpdateUser.java:接收前端用戶(hù)個(gè)人信息修改提交的數(shù)據(jù),并且在返回時(shí)作為一個(gè)對(duì)象顯示Book.java:書(shū)籍實(shí)體類(lèi),對(duì)應(yīng)書(shū)籍表的字段Borrow.java:借閱實(shí)體類(lèi),對(duì)應(yīng)借閱表的字段User.java:學(xué)生/用戶(hù)實(shí)體類(lèi),對(duì)應(yīng)學(xué)生表的字段第4章詳細(xì)設(shè)計(jì)與編碼實(shí)現(xiàn)4.1系統(tǒng)功能模塊劃分根據(jù)需求分析中對(duì)各種功能的解讀,構(gòu)建系統(tǒng)功能模塊圖:個(gè)人信息修改子模塊:用戶(hù)和管理員可以查詢(xún)、修改自己的信息分頁(yè)、檢索(分按ID、關(guān)鍵詞)模塊、:書(shū)籍信息、個(gè)人信息應(yīng)該能通過(guò)ID指定查詢(xún)單個(gè),或者通過(guò)模糊查詢(xún)多個(gè)。4.2系統(tǒng)功能模塊實(shí)現(xiàn)4.2.1登錄與注冊(cè)模塊用戶(hù)或者管理員輸入賬號(hào)密碼驗(yàn)證登錄,進(jìn)入主頁(yè)面并且通過(guò)權(quán)限控制,顯示不同角色應(yīng)該訪(fǎng)問(wèn)的頁(yè)面。創(chuàng)建LoginController控制類(lèi)用于處理登錄、注銷(xiāo)相關(guān)的請(qǐng)求。系統(tǒng)自開(kāi)始運(yùn)行,若頁(yè)面session中沒(méi)有用戶(hù)數(shù)據(jù)輸入登錄地址首先應(yīng)該進(jìn)入的必須是登錄頁(yè)面,其他頁(yè)面只要有請(qǐng)求全部攔截并轉(zhuǎn)到登錄頁(yè),所以使用攔截器攔截不該被訪(fǎng)問(wèn)的請(qǐng)求才是首先應(yīng)該考慮的問(wèn)題。實(shí)現(xiàn)如下接口;添加攔截判斷并設(shè)置需要攔截和放行的資源和請(qǐng)求,如靜態(tài)資源和注冊(cè)頁(yè)面是應(yīng)該被放行的頁(yè)面。調(diào)試登錄(login)頁(yè)面: 類(lèi)似于登錄請(qǐng)求的代碼邏輯,可以簡(jiǎn)單的設(shè)置注銷(xiāo)請(qǐng)求和注冊(cè)請(qǐng)求,只要有前端頁(yè)面中的按鈕點(diǎn)擊之后發(fā)送對(duì)應(yīng)的請(qǐng)求就轉(zhuǎn)至或者重定向至對(duì)應(yīng)的頁(yè)面。 注冊(cè)和登錄按鈕點(diǎn)擊會(huì)發(fā)送POST請(qǐng)求,并發(fā)送form表單數(shù)據(jù)到控制器(Controller層)的方法中去做邏輯處理(調(diào)用服務(wù)層接口登錄判斷處理)通過(guò)異常判斷執(zhí)行對(duì)應(yīng)的方法處理用戶(hù)登錄異常。注冊(cè)則是將數(shù)據(jù)存入?yún)?shù)經(jīng)過(guò)邏輯處理封裝放入POJO實(shí)體類(lèi),傳入持久化層執(zhí)行接口綁定映射XML文件中的insert語(yǔ)句,最終注冊(cè)信息導(dǎo)入數(shù)據(jù)庫(kù),重回的登錄頁(yè)。輸入正確的密碼登錄成功之前會(huì)還會(huì)交給shiro框架做一個(gè)角色認(rèn)證,只有正確的角色權(quán)限才能進(jìn)入主頁(yè),并可以被允許登至與之匹配的頁(yè)面。4.2.2借書(shū)模塊用戶(hù)/學(xué)生登錄首頁(yè)成功之后,可單擊圖書(shū)信息按鈕發(fā)送bookhome請(qǐng)求并進(jìn)入bookhome界面,控制器接收請(qǐng)求、用戶(hù)數(shù)據(jù)和分頁(yè)參數(shù),在業(yè)務(wù)邏輯中將參數(shù)交給接口,執(zhí)行會(huì)使用select語(yǔ)句查詢(xún)數(shù)據(jù)庫(kù)中的book表,拿到所有圖書(shū)的參數(shù)包括(數(shù)量、編號(hào)ID、名稱(chēng)等),暫存在實(shí)體類(lèi)中,再通過(guò)存入session中,返回至前端頁(yè)面顯示設(shè)定好頁(yè)數(shù)的圖書(shū)列表,選擇切換上下頁(yè)或者檢索感興趣的書(shū)籍,也可以單擊借閱。如果切換上下頁(yè)和檢索書(shū)籍ID和名稱(chēng)信息會(huì)調(diào)用分頁(yè)、檢索模塊,如果是借閱,則控制層接收請(qǐng)求并且拿到列表中對(duì)應(yīng)的書(shū)的ID;表查詢(xún)檢索brrow表和通過(guò)書(shū)籍的ID查詢(xún)book表,判斷這本書(shū)是不是沒(méi)有剩余量和是否同被一個(gè)用戶(hù)重復(fù)借閱。如若非以上而者,則借閱成功。修改書(shū)籍表這本書(shū)的數(shù)量;增加一條借閱記錄(那個(gè)學(xué)生ID借閱的那本書(shū)ID,借閱日期)。4.2.3還書(shū)模塊若單擊我的借閱按鈕可以進(jìn)到我的借閱頁(yè)面,對(duì)應(yīng)請(qǐng)求的控制層方法會(huì)調(diào)用相應(yīng)的接口查詢(xún)當(dāng)前用戶(hù)的數(shù)據(jù)庫(kù)中的借閱信息。點(diǎn)擊還書(shū)按鈕發(fā)送請(qǐng)求并發(fā)送對(duì)應(yīng)的書(shū)籍ID和當(dāng)前用戶(hù)信息,刪除brrow表中的借閱記錄,對(duì)應(yīng)的書(shū)籍?dāng)?shù)量加1,彈出還書(shū)成功消息框。4.2.4用戶(hù)管理模塊(新增、刪除、編輯子模塊)當(dāng)學(xué)生信息按鈕被管理員單擊發(fā)送相應(yīng)請(qǐng)求之后,會(huì)轉(zhuǎn)至進(jìn)入學(xué)生信息先關(guān)的頁(yè)面,控制層方法先取到session數(shù)據(jù)和頁(yè)碼和分頁(yè)大小等參數(shù)。調(diào)用服務(wù)層接口查詢(xún)所有用戶(hù)信息設(shè)置分頁(yè)大小和頁(yè)碼并封裝,返回進(jìn)前端列表顯示出來(lái)并可以檢索和切換頁(yè)面。點(diǎn)擊表格中任意一條用戶(hù)的編輯按鈕,對(duì)應(yīng)的學(xué)生參數(shù)被傳遞進(jìn)入相應(yīng)的控制器方法被執(zhí)行,然后執(zhí)行服務(wù)層接口,dao層接口,將修改的數(shù)據(jù)寫(xiě)入student表中并返回修改的后得數(shù)據(jù)。新增和刪除除了調(diào)用的接口與借書(shū)和還書(shū)模塊中不同之外邏輯基本相同。都是對(duì)數(shù)據(jù)庫(kù)某個(gè)表中一條數(shù)據(jù)的增加和刪除操作。4.2.5分頁(yè)模塊分頁(yè)模塊無(wú)論在管理員權(quán)限中的學(xué)生信息、書(shū)籍管理還是在用戶(hù)權(quán)限中的圖書(shū)信息和借閱信息中都存在重復(fù)的調(diào)用;它依賴(lài)了pagehelper插件,這是一個(gè)線(xiàn)程上的處理,在接口實(shí)現(xiàn)數(shù)據(jù)查詢(xún)的時(shí)候自動(dòng)limit(頁(yè)碼,頁(yè)面大小);最后分頁(yè)參數(shù)會(huì)和查詢(xún)返回的列表一同封裝入PageInfo的時(shí)候會(huì)自動(dòng)帶上頁(yè)碼、頁(yè)面的大小、頁(yè)面總數(shù)等。然后存入model準(zhǔn)備往前端返回?cái)?shù)據(jù),前端只需要在應(yīng)該顯示的地方調(diào)用聲明并遍歷出列表中的數(shù)據(jù)和分頁(yè)的相關(guān)參數(shù)。另外有些方法還并入了模糊查詢(xún)功能同分頁(yè)一同調(diào)用。個(gè)人信息修改模塊和圖書(shū)管理模塊,仍然是與之前的請(qǐng)求相同的業(yè)務(wù)處理邏輯和數(shù)據(jù)操縱方式。第5章綜合調(diào)試與維護(hù)5.1用戶(hù)權(quán)限初始開(kāi)發(fā)時(shí),登錄判斷交給了Spring原生過(guò)濾器去做,密碼則直接在業(yè)務(wù)邏輯中驗(yàn)證,調(diào)試時(shí)發(fā)現(xiàn)管理員和用戶(hù)的訪(fǎng)問(wèn)權(quán)限沒(méi)有被分開(kāi),兩者的頁(yè)面可以互相訪(fǎng)問(wèn),為了改正這種錯(cuò)誤訪(fǎng)問(wèn),通過(guò)shiro框架中的一些接口和方法攔截請(qǐng)求和封裝用戶(hù)登錄時(shí)的表單數(shù)據(jù)。整個(gè)權(quán)限的處理過(guò)程分為三步:首先,定義獲取權(quán)限信息類(lèi),拿到當(dāng)前登錄對(duì)象,加載數(shù)據(jù)庫(kù)中當(dāng)前用戶(hù)的權(quán)限。然后,定義權(quán)限認(rèn)證異常類(lèi),從參數(shù)中拿到用戶(hù)的登錄信息,做用戶(hù)名和密碼認(rèn)證(交給shiro來(lái)實(shí)現(xiàn)),連接數(shù)據(jù)庫(kù)對(duì)比;返回認(rèn)證信息。最

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論