第6章-基于SMM框架的應(yīng)用開發(fā)_第1頁
第6章-基于SMM框架的應(yīng)用開發(fā)_第2頁
第6章-基于SMM框架的應(yīng)用開發(fā)_第3頁
第6章-基于SMM框架的應(yīng)用開發(fā)_第4頁
第6章-基于SMM框架的應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章基于SMM框架的應(yīng)用開發(fā)回顧使用SMM架構(gòu)的優(yōu)勢是:簡單、靈活、易于擴(kuò)展。避免了復(fù)雜的緩存機(jī)制,在程序運行效率方面也得到了相應(yīng)的提高。Spring3.0注解支持,從而提高程序的開發(fā)效率。MyBatisGenerator能夠自動生成持久層映射。@Autowired注解用于自動裝配對象,類似于在applicationContext.xml文件中注入對象。在注入Mapper時,其注入順序是:dataSource→sqlSessionFactory→xxMapper。本章內(nèi)容1MapperDAO2權(quán)限管理程序1實現(xiàn)“商品管理”程序的修改功能2實現(xiàn)“權(quán)限管理”程序的修改權(quán)限功能改進(jìn)“商品信息管理”案例,

完成商品表信息修改功能實踐練習(xí)MapperDAO方法詳解完成客戶信息列表完成客戶信息組合查詢技術(shù)講解講解時間:30分鐘實踐時間:60分鐘6.1MapperDAO:內(nèi)容預(yù)覽6.1.1MapperDAO方法詳解MapperDAO方法使用Generator自動工具生成時,系統(tǒng)產(chǎn)生了一個Mapper類,它封裝了DML的常用方法。方法名說明countByExample通過任意查詢條件,返回表中的數(shù)據(jù)行數(shù)deleteByExample通過任意條件刪除表數(shù)據(jù),返回受影響的行數(shù)deleteByPrimaryKey通過主鍵刪除表數(shù)據(jù),返回受影響的行數(shù)insert全字段添加數(shù)據(jù),返回受影響的行數(shù)insertSelective任意字段添加數(shù)據(jù),返回受影響的行數(shù)selectByExample通過任意條件查詢數(shù)據(jù),返回List結(jié)果集selectByPrimaryKey通過主鍵查詢數(shù)據(jù),返回實體對象updateByExampleSelective通過任意條件更新表數(shù)據(jù),返回受影響的行數(shù)updateByExample更新全字段的數(shù)據(jù),返回受影響的行數(shù)updateByPrimaryKeySelective通過主鍵更新表任意字段數(shù)據(jù),返回受影響的行數(shù)updateByPrimaryKey通過主鍵更新表全字段數(shù)據(jù),返回受影響的行數(shù)6.1.1MapperDAO方法詳解Example參數(shù)在方法中使用了大量的Example作為參數(shù),該如何使用?CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameEqualTo("穆勒");List<Customer>list=customerMapper.selectByExample(example);MyBatis代碼selectcus_id,cus_name,cus_birthday,cus_gradefromcustomerWHERE(cus_name=?)SQL語句輸出通過cus_name字段查詢結(jié)果集6.1.1MapperDAO方法詳解Customercustomer=newCustomer();customer.setCusGrade("NONE");CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameLike("穆%");intcount=customerMapper.updateByExampleSelective(customer,example);通過cus_name字段模糊匹配,更新cus_grade,返回結(jié)果集。updatecustomerSETcus_grade=?WHERE(cus_namelike?)SQL語句輸出MyBatis代碼6.1.1MapperDAO方法詳解CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameEqualTo("jack");example.or(example.createCriteria().andCusGradeEqualTo("VIP"));example.setOrderByClause("cus_iddesc");List<Customer>list=customerMapper.selectByExample(example);通過cus_name和cus_grade字段查詢,并通過cus_id倒序結(jié)果集。selectcus_id,cus_name,cus_birthday,cus_gradefromcustomerWHERE(cus_name=?)or(cus_grade=?)orderbycus_iddescSQL語句輸出MyBatis代碼6.1.2完成客戶信息列表本案例要求實現(xiàn)客戶信息列表功能。開啟SpringMVC框架對JSTL標(biāo)簽庫的支持;依次編寫數(shù)據(jù)庫訪問層、業(yè)務(wù)邏輯層和控制層的代碼;最后,在頁面中使用JSTL,結(jié)合EL表達(dá)式渲染。顯示客戶信息列表功能6.1.2完成客戶信息列表1.在viewSpace-servlet.xml文件中,添加視圖層對JSTL標(biāo)簽庫的支持。viewSpace-servlet.xml<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="viewClass" value="org.springframework.web.servlet.view.JstlView"></property></bean>6.1.2完成客戶信息列表2.在CustomerService類中,編寫獲取用戶列表的方法。3.在CustomerController類中,編寫控制器方法,通過request保存輸出結(jié)果集。4.在index.jsp頁面中,添加跳轉(zhuǎn)鏈接,請求控制器中的all()方法。CustomerService.xmlpublicList<Customer>findCustomers(){CustomerExampleexample=newCustomerExample();returncustomerMapper.selectByExample(example);}CustomerController.java@RequestMapping(value="/all")publicStringall(HttpServletRequestrequest){ request.setAttribute("cusList",customerService.findCustomers()); return"display.jsp";}index.jsp<ahref="all.form">查看客戶信息列表</a>6.1.2完成客戶信息列表5.在WebRoot目錄中,創(chuàng)建display.jsp文件,接收并渲染結(jié)果集。display.jsp<%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/fmt"prefix="fmt"%>……<tableborder="1"width="500"align="center">……<c:forEachvar="cus"items="${cusList}"varStatus="vs"> <tr> <td>${vs.count}</td> <td>${cus.cusName}</td> <td><fmt:formatDatevalue="${cus.cusBirthday}" pattern="yyyy年MM月dd日"/></td> <td>${cus.cusGrade}</td> </tr></c:forEach></table>日期類型格式化6.1.3完成客戶信息組合查詢本案例在客戶列表基礎(chǔ)上,增加信息的組合查詢功能。對“用戶名”和“客戶級別”字段進(jìn)行組合查詢。如果直接點擊“查找”按鈕,則查詢出所有客戶信息;當(dāng)輸入一個條件時,則按單條件查詢;如果輸入兩個條件,將使用AND多條件查詢。實現(xiàn)客戶信息組合查詢功能6.1.3完成客戶信息組合查詢1.在CustomerService類中,編寫findByProperty方法,接收查詢參數(shù),返回查詢列表。CustomerService.javapublicList<Customer>findByProperty(Customercus){CustomerExampleexample=newCustomerExample();Criteriac=example.createCriteria();if(!"請選擇".equals(cus.getCusGrade())) //等級條件匹配 c.andCusGradeEqualTo(cus.getCusGrade()); //and條件拼接if(!"".equals(cus.getCusName())) //姓名條件模糊匹配 c.andCusNameLike("%"+cus.getCusName()+"%");returncustomerMapper.selectByExample(example); }客戶信息條件查詢6.1.3完成客戶信息組合查詢2.在CustomerController類中,編寫search方法,接收查詢參數(shù),返回查詢結(jié)果集。CustomerController.java@RequestMapping(value="/search")publicStringsearch(@ModelAttribute("customer")Customercus,HttpServletRequestrequest){request.setAttribute("cusList",customerService.findByProperty(cus));return"display.jsp";}將查詢結(jié)果保存到request對象中6.1.3完成客戶信息組合查詢3.在display.jsp頁面中,添加表單。display.jsp<tableborder="1"width="500"align="center"><tr> <tdcolspan="4"> <formaction="search.form"method="post">

客戶姓名:<inputname="cusName"/>|

客戶等級: <selectname="cusGrade"> <optionvalue="請選擇">-=請選擇=-</option> <optionvalue="NONE">NONE</option> <optionvalue="VIP">VIP</option> </select>| <inputtype="submit"value="查找"> </form></table>6.1.3完成客戶信息組合查詢4.在瀏覽器index頁面中。重新點擊“查看客戶信息列表”超鏈接,顯示display.jsp頁面。在使用AND多條件查詢時,要使用同一個Criteria對象操作。例如:Criteriac=example.createCriteria();c.andCusGradeEqualTo();c.andCusGradeEqualTo(); 如果,每次都使用新的example.createCriteria()調(diào)用子方法,此時條件會被覆蓋6.1.4學(xué)生實踐練習(xí)實踐時間:60分鐘改進(jìn)“商品信息管理”案例,完成商品表信息修改功能。在details.jsp頁面中修改商品信息,點擊“修改”按鈕,數(shù)據(jù)庫信息更新。修改后,回到本頁面顯示修改后的信息。6.1.4學(xué)生實踐練習(xí)在GoodsService類中,編寫修改商品信息的業(yè)務(wù)邏輯代碼。在GoodsController類中,編寫處理修改的控制器方法。修改details.jsp頁面,添加表單和提交按鈕。在瀏覽器地址欄中,輸入http://localhost:8080/goodsProject/details.jsp地址,查看運行結(jié)果。

改進(jìn)“權(quán)限管理程序”案例,

完成修改權(quán)限功能實踐練習(xí)程序設(shè)計和數(shù)據(jù)庫設(shè)計搭建程序框架完成用戶權(quán)限查詢功能完成權(quán)限添加功能技術(shù)講解講解時間:30分鐘實踐時間:60分鐘6.2權(quán)限管理程序:內(nèi)容預(yù)覽6.2.1程序設(shè)計和數(shù)據(jù)庫設(shè)計權(quán)限管理是任何軟件程序必備的功能,權(quán)限管理中包含對權(quán)限和權(quán)限組的管理,再將權(quán)限或權(quán)限組授予用戶,權(quán)限是限制用戶訪問的依據(jù)。在復(fù)雜系統(tǒng)中,對權(quán)限管理的依賴性很大。在本程序中僅對權(quán)限級別進(jìn)行授權(quán),程序?qū)崿F(xiàn)功能如下:用戶信息列表用戶權(quán)限查詢新用戶授權(quán)功能6.2.1程序設(shè)計和數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫中涉及三張表,分別為用戶表(Users)、權(quán)限表(Roles)和用戶權(quán)限中間表(user_role_link),三張表的設(shè)計是典型的多對多關(guān)系。6.2.2搭建程序框架使用MyBatisGenerator自動工具,通過數(shù)據(jù)庫中的表生成映射,包括Entity、DAO類和MapperXML配置文件。6.2.2搭建程序框架在Users實體類中添加對Roles實體類的引用?Mapper如何配置?publicclassUsers{privateList<Roles>roles;//省略get/set……}<resultMapid="RolesResultMap"type="com.mstf.smm.entity.Users"

extends="BaseResultMap"><collectionproperty="roles"ofType="com.mstf.smm.entity.Roles"

column="user_id"> <idproperty="roleId"column="role_id"/> <resultproperty="roleName"column="role_name"/></collection></resultMap>6.2.3完成用戶權(quán)限查詢功能本案例實現(xiàn)用戶列表顯示和用戶權(quán)限查詢功能,當(dāng)用戶進(jìn)入index.jsp頁面時,首先加載用戶信息列表,其中包括姓名和密碼信息。完成用戶權(quán)限查詢功能6.2.3完成用戶權(quán)限查詢功能當(dāng)點擊“權(quán)限”鏈接時,顯示用戶所擁有的權(quán)限。完成用戶權(quán)限查詢功能6.2.3完成用戶權(quán)限查詢功能1.在UsersMapper.xml文件中,添加<select>元素配置sql命令,該sql命令用于查詢用戶信息和所擁有的權(quán)限信息,并且在對應(yīng)Mapper接口中配置代理方法。<selectid="selectRoleNameByPrimaryKey"resultMap="RolesResultMap"parameterType="java.lang.Integer">SELECTu.user_id,u.user_name,r.role_nameFROMusersuINNERJOINuser_role_linklONu.user_id=l.user_idINNERJOINrolesrONl.role_id=r.role_idWHEREu.user_id=#{userId,jdbcType=INTEGER}</select>6.2.3完成用戶權(quán)限查詢功能2.在UsersService類中,編寫findAll和findRolesByUserID方法,用于查詢所有用戶和用戶權(quán)限信息。//查詢所有用戶publicListfindAll(){returnusersMapper.selectByExample(null);}//通過用戶ID查詢,用戶的權(quán)限publicUsersfindRolesByUserID(Integerid){returnusersMapper.selectRoleNameByPrimaryKey(id);}6.2.3完成用戶權(quán)限查詢功能3.在UsersController類中,編寫用于響應(yīng)頁面請求的方法,并在web.xml文件中將歡迎(啟動)頁面設(shè)置為“getUsersAll.form“。4.在index.jsp頁面中,添加列表顯示的html元素。由老師演示代碼的實現(xiàn)步驟6.2.4完成權(quán)限添加功能本案例在示例6.3基礎(chǔ)上添加授權(quán)功能,當(dāng)用戶尚未授予任何權(quán)限時,點擊“新用戶授權(quán)”超鏈接進(jìn)入授權(quán)頁面,首先將顯示要授權(quán)的用戶姓名和權(quán)限列表。完成權(quán)限添加功能6.2.4完成權(quán)限添加功能1.在RolesService類中,編寫saveRole方法,接收用戶id和權(quán)限的id參數(shù),執(zhí)行批量添加方法。publicvoidsaveRole(intuserId,int[]roleId){for(inti=0;i<roleId.length;i++){ userRoleLinkMapper.insert(newUserRoleLink(userId,roleId[i]));}}6.2.4完成權(quán)限添加功能2.在RolesController類中,編寫grant方法實現(xiàn)授權(quán),并返回index.jsp頁面,顯示當(dāng)前已授權(quán)的用戶權(quán)限。@RequestMapping(value="/grant")publicStringgrant(@RequestParam("grantRole")int[]grantRole,@RequestParam("userId")intuserId){rolesService.saveRole(userId,grantRole);//返回index.jsp頁面

return"getUsersRole.form?id="+userId;}6.2.4完成權(quán)限添加功能2.在RolesController類中,編寫grant方法實現(xiàn)授權(quán),并返回index.jsp頁面,顯示當(dāng)前已授權(quán)的用戶權(quán)限。@RequestMapping(value="/grant")publicStringgrant(@RequestParam("grantRole")int[]grantRole,@RequestParam("userId")intuserId){rolesService.saveRole(userId,grantRole);//返回index.jsp頁面

return"getUsersRole.form?id="+userId;}3.在display.jsp頁面中,添加表單。6.2.5學(xué)生實踐練習(xí)實踐時間:60分鐘在權(quán)限管理程序的現(xiàn)有基礎(chǔ)上,為程序新增修改權(quán)限功能。6.2.5學(xué)生實踐練習(xí)進(jìn)入權(quán)限修改的頁面,初始化頁面,并且現(xiàn)在當(dāng)前用戶

溫馨提示

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

評論

0/150

提交評論