基于SSM框架的管理系統(tǒng)
【文末附源碼】
1
前言
基于SSM框架的管理系統(tǒng) 簡(jiǎn)潔版 ;
實(shí)現(xiàn) 登錄 、 注冊(cè) 、 增 、 刪 、 改 、 查 ;
可繼續(xù)完善增加前端、校驗(yàn)、其他功能等;
可作為SSM項(xiàng)目開發(fā)練習(xí)基礎(chǔ)模型;
課程設(shè)計(jì) 、畢業(yè)設(shè)計(jì)開發(fā)基礎(chǔ);
任何復(fù)雜的框架都是簡(jiǎn)單的知識(shí)組合并延伸的,學(xué)好基礎(chǔ)知識(shí)才是最重要的;
此項(xiàng)目簡(jiǎn)單,便于理解基本原理,為復(fù)雜SSM復(fù)雜項(xiàng)目的開發(fā)打下基礎(chǔ)。
2
環(huán)境準(zhǔn)備
開發(fā)平臺(tái) :IDEA 2019
數(shù)據(jù)庫(kù) :MySQL 5.0.22
服務(wù)器 :Tomcat 9.0.37
注意 :需要安裝IDEA開發(fā)平臺(tái)、MySQL數(shù)據(jù)庫(kù)和Tomcat服務(wù)器,版本不一定完全一致,做好版本適應(yīng)性配置即可。
3
項(xiàng)目結(jié)構(gòu)
3.1數(shù)據(jù)庫(kù)及Java代碼文件
3.2Jsp等前端代碼
3.3Tomcat服務(wù)器配置與運(yùn)行
3.4MySQL數(shù)據(jù)庫(kù)
4
基本原理
4.1相關(guān)概念
** Spring**
Spring是一個(gè)開源框架,是2003年興起的輕量級(jí)的Java開發(fā)框架,為解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架。日常開發(fā)中IOC容器使用較多,可以裝載Bean,即Java中的類,不用在每次使用類的時(shí)候初始化,很少出現(xiàn)關(guān)鍵字new。另外Spring的AOP,事務(wù)管理等等也會(huì)經(jīng)常使用。
IOC:
控制反轉(zhuǎn),是一種降低對(duì)象之間耦合關(guān)系的設(shè)計(jì)思想。如:租賃房屋,平常租房需要自己逐個(gè)小區(qū)尋找房屋,然后使用了IOC之后,即需找一個(gè)租房中介,把對(duì)房屋的需求告訴中介,就可以直接找到合適的房屋。即把需求交給了第三方,有第三方幫助完成需求,中介就相當(dāng)于Spring容器。
AOP:
面向切面編程,是面向?qū)ο箝_發(fā)的一種補(bǔ)充,允許開發(fā)人員在不改變?cè)瓉?lái)模型的基礎(chǔ)上動(dòng)態(tài)的修改模型以滿足新的需求,如:動(dòng)態(tài)的增加日志、安全或異常處理等。AOP使業(yè)務(wù)邏輯各部分間的耦合度降低,提高程序可重用性,提高開發(fā)效率。
** SpringMVC**
Spring MVC分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧菀走M(jìn)行定制。
SpringMVC工作流程:
1.用戶向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求被Spring前端控制Servelt DispatcherServlet捕獲;
2.DispatcherServlet對(duì)請(qǐng)求URL進(jìn)行解析,得到請(qǐng)求資源標(biāo)識(shí)符(URI)。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對(duì)象(包括Handler對(duì)象以及Handler對(duì)象對(duì)應(yīng)的攔截器),最后以HandlerExecutionChain對(duì)象的形式返回;
3.DispatcherServlet 根據(jù)獲得的Handler,選擇一個(gè)合適的HandlerAdapter。(注:如果成功獲得HandlerAdapter后,此時(shí)將開始執(zhí)行攔截器的preHandler(...)方法)
4.提取Request中的模型數(shù)據(jù),填充Handler入?yún)ⅲ_始執(zhí)行Handler(Controller)。在填充Handler的入?yún)⑦^(guò)程中,根據(jù)你的配置,Spring將幫你做一些額外的工作:
HttpMessageConveter:將請(qǐng)求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對(duì)象,將對(duì)象轉(zhuǎn)換為指定的響應(yīng)信息;
數(shù)據(jù)轉(zhuǎn)換:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換。如String轉(zhuǎn)換成Integer、Double等;
數(shù)據(jù)格式化:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)格式化。如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等;
數(shù)據(jù)驗(yàn)證:驗(yàn)證數(shù)據(jù)的有效性(長(zhǎng)度、格式等),驗(yàn)證結(jié)果存儲(chǔ)到BindingResult或Error;
5.Handler執(zhí)行完成后,向DispatcherServlet返回一個(gè)ModelAndView對(duì)象;
6.根據(jù)返回的ModelAndView,選擇一個(gè)適合的ViewResolver(必須是已經(jīng)注冊(cè)到Spring容器中的 ViewResolver)返回給DispatcherServlet;
7.ViewResolver 結(jié)合Model和View,來(lái)渲染視圖;
8.將渲染結(jié)果返回給客戶端。
** MyBatis**
MyBatis是一個(gè)基于Java的持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJOs(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。MyBatis是對(duì)Jdbc的封裝,讓數(shù)據(jù)庫(kù)底層操作變的透明。Mybatis的操作都是圍繞一個(gè)sqlSessionFactory實(shí)例展開的。mybatis通過(guò)配置文件關(guān)聯(lián)到各實(shí)體類的Mapper文件,Mapper文件中配置了每個(gè)類對(duì)數(shù)據(jù)庫(kù)所需進(jìn)行的sql語(yǔ)句映射。在每次與數(shù)據(jù)庫(kù)交互時(shí),通過(guò)sqlSessionFactory拿到一個(gè)sqlSession,再執(zhí)行sql命令。
4.2實(shí)現(xiàn)流程
0.數(shù)據(jù)庫(kù)database-;
1.實(shí)體類com.pojo-,定義對(duì)象的屬性;
2.mapper-Mapper.xml(Mybatis),其中定義功能,對(duì)應(yīng)要對(duì)數(shù)據(jù)庫(kù)進(jìn)行的那些操作,比如insert、selectAll、selectByKey、delete、update等;
3.com.dao-Mapper.java,將Mapper.xml中的操作按照id映射成Java函數(shù);
4.com.Service-Service.java,為控制層提供服務(wù),接受控制層的參數(shù),完成相應(yīng)的功能,并返回給控制層;
5.com.controller-Controller.java,連接頁(yè)面請(qǐng)求和服務(wù)層,獲取頁(yè)面請(qǐng)求的參數(shù),通過(guò)自動(dòng)裝配,映射不同的URL到相應(yīng)的處理函數(shù),并獲取參數(shù),對(duì)參數(shù)進(jìn)行處理,之后傳給服務(wù)層;
6.Jsp-前端JSP頁(yè)面調(diào)用,請(qǐng)求哪些參數(shù),需要獲取什么數(shù)據(jù)。
DataBase ===> pojo ===> Mapper.xml ===> dao ===> Service ===> controller ===> Jsp
4.3實(shí)現(xiàn)基本原理
SSM框架是Spring MVC ,Spring和MyBatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,Controller層,Service層,Dao層;
Spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,負(fù)責(zé)controller和jsp的,也就是視圖層;
Spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,提供對(duì)象的,利用其IOC與AOP貫穿于整個(gè)項(xiàng)目。為各個(gè)層之間提供對(duì)象創(chuàng)建和注入,解耦合。比如我的這個(gè)項(xiàng)目提供了dao層的對(duì)象;
MyBatis作為數(shù)據(jù)對(duì)象的持久化引擎,負(fù)責(zé)數(shù)據(jù)庫(kù)的連接,與Spring整合后,配合Spring可提供dao層對(duì)象。
** 持久層:Dao層(mapper)**
Dao層:Dao層主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此,Dao層的設(shè)計(jì)首先是設(shè)計(jì)Dao的接口,然后在Spring的配置文件中定義此接口的實(shí)現(xiàn)類,然后就可在模塊中調(diào)用此接口來(lái)進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理,而不用關(guān)心此接口的具體實(shí)現(xiàn)類是哪個(gè)類,顯得結(jié)構(gòu)非常清晰,Dao層的數(shù)據(jù)源配置,以及有關(guān)數(shù)據(jù)庫(kù)連接的參數(shù)都在Spring的配置文件中進(jìn)行配置。
**業(yè)務(wù)層:Service層**
Service層:Service層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)。首先設(shè)計(jì)接口,再設(shè)計(jì)其實(shí)現(xiàn)的類,接著再在Spring的配置文件中配置其實(shí)現(xiàn)的關(guān)聯(lián)。這樣我們就可以在應(yīng)用中調(diào)用Service接口來(lái)進(jìn)行業(yè)務(wù)處理。Service層的業(yè)務(wù)實(shí)現(xiàn),具體要調(diào)用到已定義的DAO層的接口,封裝Service層的業(yè)務(wù)邏輯有利于通用的業(yè)務(wù)邏輯的獨(dú)立性和重復(fù)利用性,程序顯得非常簡(jiǎn)潔。
**表現(xiàn)層:Controller層(Handler層)**
Controller層:Controller層負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制,在此層里面要調(diào)用Service層的接口來(lái)控制業(yè)務(wù)流程,控制的配置也同樣是在Spring的配置文件里面進(jìn)行,針對(duì)具體的業(yè)務(wù)流程,會(huì)有不同的控制器,我們具體的設(shè)計(jì)過(guò)程中可以將流程進(jìn)行抽象歸納,設(shè)計(jì)出可以重復(fù)利用的子單元流程模塊,這樣不僅使程序結(jié)構(gòu)變得清晰,也大大減少了代碼量。
**View層:**
View層與控制層結(jié)合比較緊密,需要二者結(jié)合起來(lái)協(xié)同工發(fā)。View層主要負(fù)責(zé)前臺(tái)Jsp頁(yè)面的表示。
5
頁(yè)面展示
5.1登錄頁(yè)面
5.2注冊(cè)頁(yè)面
5.3主頁(yè)
5.4展示頁(yè)面
5.5新增頁(yè)面
5.6刪除頁(yè)面
5.7修改頁(yè)面
6
注意
1.MySQL 版本5.0以上與8.0以上配置有些許差異,需要調(diào)整,根據(jù) jdbc.properties 文件中的提示,選擇合適的數(shù)據(jù)庫(kù)驅(qū)動(dòng) driver;
# MySQL 5.Xjdbc.driver=com.mysql.jdbc.Driver# MySQL 8.Xjdbc.driver=com.mysql.cj.jdbc.Driver
2.運(yùn)行項(xiàng)目前提前配置好MySQL數(shù)據(jù)庫(kù)、Tomcat服務(wù)器、IDEA maven依賴庫(kù);
3.本系統(tǒng)僅實(shí)現(xiàn)簡(jiǎn)單功能,僅為更好理解SSM原理,需進(jìn)一步完善更多功能及健壯性。
7
源碼
關(guān)注微信公眾號(hào):Java爛筆頭
回復(fù):SSM項(xiàng)目****
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論