Java Web編程技術(shù) 課件 第17章SSM框架整合與實(shí)例_第1頁(yè)
Java Web編程技術(shù) 課件 第17章SSM框架整合與實(shí)例_第2頁(yè)
Java Web編程技術(shù) 課件 第17章SSM框架整合與實(shí)例_第3頁(yè)
Java Web編程技術(shù) 課件 第17章SSM框架整合與實(shí)例_第4頁(yè)
Java Web編程技術(shù) 課件 第17章SSM框架整合與實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JavaWeb編程技術(shù)本章介紹Spring、SpringMVC如何與MyBatis整合,整合后開發(fā)基于SSM的應(yīng)用程序。MyBatis與Spring的整合MyBatis與SpringMVC的整合基于SSM的會(huì)員管理第17章SSM框架整合與實(shí)例在前面章節(jié)中,分別講解了Spring、SpringMVC和MyBatis的相關(guān)知識(shí),然而在實(shí)際的項(xiàng)目開發(fā)中,Spring、SpringMVC和MyBatis需要整合在一起使用。SSM框架的分層結(jié)構(gòu)SSM(Spring+SpringMVC+MyBatis)是目前最流行的開源框架。SSM框架是一個(gè)分層式開發(fā)架構(gòu),它在JavaEE多層模型的基礎(chǔ)上對(duì)每一層又進(jìn)行了細(xì)分,劃分出4層結(jié)構(gòu),分別是:表示層(JSP)、業(yè)務(wù)控制層(Controller)、業(yè)務(wù)邏輯層(Service)、數(shù)據(jù)持久層(Mapper接口),如圖17-1所示。17.1整合環(huán)境搭建由于SpringMVC是Spring框架的一個(gè)模塊,SpringMVC與Spring之間不存在整合的問(wèn)題,只要引入相應(yīng)的JAR包即可。因此,SSM框架的整合只涉及MyBatis與Spring的整合,以及MyBatis與SpringMVC的整合。17.2在pom.xml中添加依賴項(xiàng)17.2.1要實(shí)現(xiàn)SSM框架的整合,首先需要準(zhǔn)備這Spring和MyBatis框架整合所需的JAR包,本書使用Maven作為項(xiàng)目管理工具,因此需要在pom.xml中添加依賴項(xiàng),具體如下。1.Spring框架所需的包使用到的Spring框架包使用下面依賴項(xiàng),目前的版本是6.0.2。<dependency><groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency>在pom.xml中添加依賴項(xiàng)17.2.12.數(shù)據(jù)庫(kù)驅(qū)動(dòng)JAR包本書使用MySQL8數(shù)據(jù)庫(kù),它的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序包使用下面依賴項(xiàng)。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency>在pom.xml中添加依賴項(xiàng)17.2.13.MyBatis框架所需的JAR包使用MyBatis框架需要添加下面依賴項(xiàng)。<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency>在pom.xml中添加依賴項(xiàng)17.2.14.數(shù)據(jù)源C3P0和Lombok所需的包C3P0是一個(gè)開源的JDBC連接池,它實(shí)現(xiàn)了數(shù)據(jù)源和JNDI綁定,支持JDBC規(guī)范標(biāo)準(zhǔn)擴(kuò)展。目前使用它的開源項(xiàng)目有Hibernate,Spring等。本書使用C3P0數(shù)據(jù)源,使用下面依賴項(xiàng)。<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version></version></dependency><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>在pom.xml中添加依賴項(xiàng)17.2.15.JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)JSTL包

若使用Tomcat11及以上版本(支持JakartaEE10)使用下面依賴項(xiàng)。<dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>2.0.0</version></dependency>在pom.xml中添加依賴項(xiàng)17.2.16.MyBatis與Spring整合的中間件為了滿足MyBatis用戶對(duì)Spring框架的需求,MyBatis社區(qū)開發(fā)了一個(gè)用于整合這兩個(gè)框架的中間件MyBatis-Spring。從/artifact/org.mybatis/mybatis-spring地址下載該中間件。目前該中間件的最新版本是2.0.7,使用下面依賴項(xiàng)。<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.1</version></dependency>基于MapperScannerConfigurer的整合17.2.2使用MyBatisSpring中間件可以采用MapperScannerConfigurer類通過(guò)自動(dòng)掃描的形式來(lái)配置MyBatis的映射器。MapperScannerConfigurer的使用非常簡(jiǎn)單,只需要在Spring的配置文件applicationContext.xml中添加如下代碼。<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定會(huì)話工廠,如果當(dāng)前上下文中只定義了一個(gè)則該屬性可省去--><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property><!--指定要自動(dòng)掃描Mapper接口所在的基礎(chǔ)包--><propertyname="basePackage"value="com.boda.mapper"></property></bean>編寫配置文件17.2.3在基于SSM框架的應(yīng)用程序中,需要編寫多個(gè)配置文件,如下所示:applicationContext.xml,它是Spring的配置文件,主要配置數(shù)據(jù)源、會(huì)話工廠以及MyBatis與Spring整合的中間件等,如清單17.2所示。mybatis-config.xml,MyBatis的配置文件,主要配置MyBatis日志、映射文件等,如清單17.3所示。springmvc-config.xml,它是SpringMVC配置文件,主要配置靜態(tài)資源、視圖解析器等,如清單17.4所示。web.xml,它是項(xiàng)目的部署描述文件,主要配置SpringMVC的前端控制器等,如清單17.5所示。整合應(yīng)用測(cè)試17.2.4完成了SSM框架的整合環(huán)境搭建,就可以開發(fā)測(cè)試應(yīng)用程序。本例使用第5章清單5.8在數(shù)據(jù)庫(kù)中創(chuàng)建的products表。下面是創(chuàng)建應(yīng)用程序的具體步驟。(1)在項(xiàng)目的src/main/java目錄中,創(chuàng)建com.boda.domain包,并在其中創(chuàng)建Product實(shí)體類,代碼如清單17.6所示。清單17.6Product.java(2)在項(xiàng)目的src/main/java目錄中,創(chuàng)建com.boda.mapper包,并在包中創(chuàng)建持久化類ProductMapper接口和ProductMapper.xml文件,代碼如下。清單17.7ProductMapper.java(3)在項(xiàng)目的src/main/java目錄中,創(chuàng)建com.boda.service包,并在包中創(chuàng)建服務(wù)接口ProductService和ProductServiceImpl實(shí)現(xiàn)類,代碼如下。清單17.8ProductService.java清單17.9ProductServiceImpl.java整合應(yīng)用測(cè)試17.2.4(4)在項(xiàng)目的src/main/java目錄中,創(chuàng)建com.boda.controller包,并在包中創(chuàng)建用于處理頁(yè)面請(qǐng)求的ProductController控制器,代碼如下。清單17.10ProductController.java(5)在WEB-INF目錄中創(chuàng)建一個(gè)jsp文件夾,在其中創(chuàng)建一個(gè)用于顯示客戶信息的JSP頁(yè)面product.jsp,代碼如下。清單17.11product.jsp(6)在瀏覽器地址欄中輸入下面地址訪問(wèn)客戶號(hào)為222的客戶信息,顯示結(jié)果如圖17-2所示。http://localhost:8080/chapter17/find-product?id=222基于SSM的會(huì)員管理17.3本節(jié)在上一節(jié)將Spring、SprngMVC與MyBatis成功整合的基礎(chǔ)上開發(fā)一個(gè)簡(jiǎn)單的會(huì)員管理系統(tǒng),該系統(tǒng)實(shí)現(xiàn)會(huì)員的注冊(cè)、登錄、查詢、刪除和修改的功能。該系統(tǒng)的架構(gòu)可以分為下面幾層:表示層:由多個(gè)JSP頁(yè)面組成。業(yè)務(wù)控制層:使用MemberController控制器類。業(yè)務(wù)邏輯層:通過(guò)業(yè)務(wù)邏輯組件構(gòu)成。數(shù)據(jù)持久層:使用MySQL數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng)數(shù)據(jù),使用MyBatis框架操作數(shù)據(jù)。數(shù)據(jù)庫(kù)層實(shí)現(xiàn)17.3.1本會(huì)員管理系統(tǒng)負(fù)責(zé)維護(hù)會(huì)員信息,系統(tǒng)只需要一個(gè)會(huì)員表。使用MySQL的webstore數(shù)據(jù)庫(kù)存儲(chǔ)會(huì)員表members,該表結(jié)構(gòu)如表17-1所示。字段名數(shù)據(jù)類型寬度是否主鍵含義idint10是會(huì)員IDusernamevarvhar30否姓名passwordvarvhar10否口令emailvarvhar30否郵箱地址telephonechar11否電話數(shù)據(jù)庫(kù)層實(shí)現(xiàn)17.3.1創(chuàng)建members表的SQL代碼如下。CREATETABLEmembers(idINTPRIMARYKEY,usernameVARCHAR(30)NOTNULL,passwordVARCHAR(10),emailVARCHAR(30),telephoneVARCHAR(11));POJO類設(shè)計(jì)17.3.2

本應(yīng)用只使用一個(gè)POJO類,即Member類,包括屬性id、username、password、email和telephone,對(duì)應(yīng)于members表的字段,代碼如下。

清單17.12Member.java@Data@NoArgsConstructor@AllArgsConstructorpublicclassMember{privateintid;//會(huì)員標(biāo)識(shí)privateStringusername;//會(huì)員名privateStringpassword;//會(huì)員口令privateStringemail;//會(huì)員EmailprivateStringtelephone;//電話}數(shù)據(jù)訪問(wèn)層設(shè)計(jì)17.3.3數(shù)據(jù)訪問(wèn)層設(shè)計(jì)主要?jiǎng)?chuàng)建Mapper映射器接口和Mapper.xml配置文件。1.創(chuàng)建映射器Mapper接口創(chuàng)建MemberMapper接口,在該接口中定義6個(gè)方法,可以實(shí)現(xiàn)添加會(huì)員、修改會(huì)員、刪除會(huì)員、按姓名和口令查找會(huì)員、按id查找會(huì)員及查找全部會(huì)員。清單17.13MemberMapper.javapublicinterfaceMemberMapper{@Insert("INSERTINTOmembersVALUES(#{id},#{username},#{password},"+"#{email},#{telephone})")publicintsave(Membermember);//添加會(huì)員@Delete("DELETEFROMmembersWHEREid=#{id}")publicintdelete(intid);//刪除會(huì)員@Update("UPDATEmembersSETusername=#{username},"+"password=#{password},email=#{email},telephone=#{telephone}"+"WHEREid=#{id}")publicintupdate(Membermember);//更新會(huì)員@Select("SELECT*FROMmembersWHEREid=#{id}")publicMemberfindById(intid);//按id查找會(huì)員@Select("SELECT*FROMmembersWHEREusername=#{username}")publicMemberfindByName(Stringusername);//按姓名查找會(huì)員@Select("SELECT*FROMmembers")publicList<Member>findAll();//查找全部會(huì)員}業(yè)務(wù)邏輯層設(shè)計(jì)17.3.4

業(yè)務(wù)邏輯層設(shè)計(jì)包含兩部分,一是創(chuàng)建業(yè)務(wù)邏輯組件接口MemberService;二是創(chuàng)建業(yè)務(wù)邏輯組件實(shí)現(xiàn)類MemberServiceImpl。1.業(yè)務(wù)邏輯組件接口

創(chuàng)建一個(gè)MemberService接口,定義添加會(huì)員、更新會(huì)員、刪除會(huì)員、按id查找及查找全部會(huì)員等方法。清單17.14MemberService.javaMemberService.java清單17.14

publicinterfaceMemberService{publicintsave(Membermember);//添加會(huì)員publicintupdate(Membermember);//更新會(huì)員publicintdelete(intid);//刪除會(huì)員publicMemberfindById(intid);//按id查找會(huì)員publicList<Member>findAll();//查找全部會(huì)員publicMemberfindByName(Stringusername,Stringpassword);//按姓名查找會(huì)員}業(yè)務(wù)邏輯層設(shè)計(jì)17.3.4

2.

業(yè)務(wù)邏輯組件實(shí)現(xiàn)類創(chuàng)建MemberServiceImpl類,它實(shí)現(xiàn)MemberService接口。在MemberServiceImpl類中通過(guò)調(diào)用數(shù)據(jù)訪問(wèn)組件來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯操作。清單17.15MemberServiceImpl.javaMemberServiceImpl.java清單17.15@Service@TransactionalpublicclassMemberServiceImplimplementsMemberService{@AutowiredprivateMemberMappermemberMapper;@Overridepublicintsave(Membermember){//添加會(huì)員//如果表中不包含該會(huì)員,則添加該會(huì)員if(memberMapper.findById(member.getId())==null)returnmemberMapper.save(member);else return0;}@Overridepublicintupdate(Membermember){//更新會(huì)員//如果表中存在該會(huì)員,則更新該會(huì)員if(memberMapper.findById(member.getId())!=null)returnmemberMapper.update(member);else return0;}@Overridepublicintdelete(intid){//刪除會(huì)員//如果表中存在該會(huì)員,則刪除該會(huì)員if(memberMapper.findById(id)!=null)returnmemberMapper.delete(id);else return0;}@OverridepublicMemberfindById(intid){//按id查找會(huì)員returnmemberMapper.findById(id);}publicList<Member>findAll(){//查找全部會(huì)員returnmemberMapper.findAll();}//按姓名查找會(huì)員publicMemberfindByName(Stringusername,Stringpassword){ Membermember=memberMapper.findByName(username); if(member!=null&&member.getPassword().equals(password)){ returnmember;}returnnull;}}控制器的開發(fā)17.3.5在項(xiàng)目的src目錄中創(chuàng)建com.boda.controller包,并在包中創(chuàng)建控制器MemberController,用于處理頁(yè)面請(qǐng)求,代碼如下。清單17.16MemberController.javaMemberController.java清單17.16@ControllerpublicclassMemberController{ privatestaticfinalLoglogger=LogFactory.getLog(MemberController.class);

@Autowired privateMemberServicememberService;

//顯示注冊(cè)表單 @RequestMapping(value="/member-register",

method=RequestMethod.GET) publicModelAndViewregister(Modelmodel){ ("registercalled"); returnnewModelAndView("memberForm","command",newMember()); } //添加會(huì)員 @RequestMapping(value="/save-member") publicStringsaveMember(@ModelAttributeMembermember,Modelmodel){ ("savemembercalled"); intn=memberService.save(member); if(n==1){ List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList"; }else{ return"error"; } }//顯示登錄表單@RequestMapping(value="/login",method=RequestMethod.GET)publicModelAndViewlogin(Modelmodel){ ("logincalled"); returnnewModelAndView("memberLogin","command",newMember());} //實(shí)現(xiàn)會(huì)員登錄@RequestMapping(value="/member-login",method=RequestMethod.POST)publicStringmemberLogin(Stringusername,Stringpassword,Modelmodel){ ("loginmembercalled"); Membermember=memberService.findByName(username,password); if(member!=null){

model.addAttribute("member",member);

return"welcome"; }else{

return"error"; } }

//查找所有會(huì)員信息@RequestMapping(value="/find-all-member")publicStringfindAllMember(Modelmodel){ ("findallmembercalled"); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

//按編號(hào)查找會(huì)員@RequestMapping(value="/find-member")publicStringfindMemberById(Integerid,Modelmodel){ ("findMembercalled"); Membermember=memberService.findById(id); model.addAttribute("member",member); return"member";}

//刪除會(huì)員@RequestMapping(value="/delete-member/{id}")publicStringdeleteMember(@PathVariableIntegerid,Modelmodel){ ("deletemembercalled"); intn=memberService.delete(id); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

//修改會(huì)員@RequestMapping(value="/edit-member/{id}")publicStringeditMember(@PathVariableIntegerid,Modelmodel){ ("editmembercalled"); Membermember=memberService.findById(id); model.addAttribute("member",member); return"memberEditForm";}

//更新會(huì)員@RequestMapping(value="/update-member")publicStringupdateMember(@ModelAttributeMembermember,Modelmodel){ ("updatemembercalled"); intn=memberService.update(member); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

視圖的實(shí)現(xiàn)15.3.6

本應(yīng)用的視圖主要包括會(huì)員注冊(cè)頁(yè)面、編輯頁(yè)面、顯示所有會(huì)員頁(yè)面、顯示登錄頁(yè)面等,如下所示。1.會(huì)員注冊(cè)頁(yè)面

會(huì)員注冊(cè)頁(yè)面memberForm.jsp包含一個(gè)表單,用來(lái)輸入會(huì)員信息,代碼如下。

清單17.17memberForm.jspmemberForm.jsp清單17.17<head><title>會(huì)員注冊(cè)</title><linkhref="css\main.css"rel="stylesheet"type="text/css"/></head><body><divclass="container"><form:formmethod="POST"action="save-member"><fieldset><legend>新會(huì)員注冊(cè)</legend><p><labelfor="id">用戶號(hào):</label><form:inputid="id"path="id"/></p><p><form:labelpath="username">用戶名:</form:label><form:inputpath="username"/></p><p><form:labelpath="password">口令:</form:label><form:passwordpath="password"/></p><p><form:labelpath="email">郵箱:</form:label><form:inputpath="email"/></p><p><form:labelpath="telephone">電話:</form:label><form:inputpath="telephone"/></p> <pclass="buttons"><inputid="submit"type="submit"value="提交"><inputid="reset"type="reset"value="重置"></p></fieldset></form:form>

視圖的實(shí)現(xiàn)15.3.6在瀏覽器地址欄輸入http://localhost:8080/chapter17/member-register,控制首先轉(zhuǎn)到控制器類的register()方法,之后轉(zhuǎn)到memberForm.jsp注冊(cè)頁(yè)面,在其中填入會(huì)員注冊(cè)信息,如圖17-3所示,單擊“提交”按鈕,注冊(cè)成功控制最終轉(zhuǎn)到memberList.jsp頁(yè)面。視圖的實(shí)現(xiàn)15.3.62.會(huì)員登錄頁(yè)面會(huì)員登錄頁(yè)面memberLogin.jsp包含一個(gè)表單,用戶接收輸入的會(huì)員名和口令,代碼如下。清單17.18memberLogin.jspmemberLogin.jsp清單17.18<form:formmethod="POST"action="member-login"><fieldset><legend>會(huì)員登錄</legend><p><form:labelpath="username">會(huì)員名</form:label><form:inputpath="username"name="username"/></p><p><form:labelpath="password">密碼</form:label><form:passwordpath="password"name="password"/></p><pclass="buttons"><inputid="submit"type="submit"value="提交"><inputid="reset"type="reset"value="重置"></p></fieldset></form:form>視圖的實(shí)現(xiàn)15.3.63.顯示所有會(huì)員頁(yè)面

在會(huì)員注冊(cè)成功后,或刪除、更新會(huì)員信息后,控制轉(zhuǎn)向memberList.jsp頁(yè)面,顯示所喲會(huì)員信息。該頁(yè)面中還為每條會(huì)員記錄提供了“刪除”和“修改”鏈接,點(diǎn)擊鏈接將執(zhí)行相應(yīng)的動(dòng)作刪除和修改會(huì)員。清單17.19memberList.jspmemberList.jsp清單17.19<tableclass="tabletable-borderedtable-sm"><tr><th>客戶號(hào)</th><th>客戶名</th><th>口令</th><th>郵箱</th><th>電話</th><th>修改</th><th>刪除</th></tr><c:forEachvar="member"items="${memberList}"><tr><td>${member.id}</td><td>${member.username}</td><td>${member.password}</td><td>${member.email}</td><td>${member.telephone}</td><td><ahref="edit-member/${member.id}">修

溫馨提示

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

評(píng)論

0/150

提交評(píng)論