SSH框架項(xiàng)目教程課件第3章第三講_第1頁(yè)
SSH框架項(xiàng)目教程課件第3章第三講_第2頁(yè)
SSH框架項(xiàng)目教程課件第3章第三講_第3頁(yè)
SSH框架項(xiàng)目教程課件第3章第三講_第4頁(yè)
SSH框架項(xiàng)目教程課件第3章第三講_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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)介

重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項(xiàng)目類)授課對(duì)象系別軟件系本次課學(xué)時(shí)4學(xué)時(shí)年級(jí)班次大二章節(jié)題目第3章hibernate多對(duì)一目的要求(含技能要求)了解hibernate多對(duì)一概念、作用掌握hibernate多對(duì)一查詢基本配置本節(jié)重點(diǎn)掌握hibernate多對(duì)一查詢基本配置本節(jié)難點(diǎn)了解hibernate多對(duì)一概念、作用教學(xué)方法項(xiàng)目教學(xué)法教學(xué)用具機(jī)房、屏幕廣播問(wèn)題引入通過(guò)用戶注冊(cè)案例中用戶表與出生地表的關(guān)系,從而引出本次課程。難點(diǎn)與重點(diǎn)講解方法引導(dǎo)、分析、講解、實(shí)作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實(shí)訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實(shí)驗(yàn)報(bào)告任務(wù)介紹(5分鐘)改造上一節(jié)查詢?nèi)蝿?wù),要求使用hibernate框架多對(duì)一(即:用戶表與省份表是多對(duì)一的關(guān)系)的配置實(shí)現(xiàn)在查詢頁(yè)面中輸入省份名這個(gè)條件查詢出屬于該省份的所有注冊(cè)用戶,其省份表、用戶表及查詢界面及查詢結(jié)果均和上一節(jié)任務(wù)一樣。任務(wù)解析(50-60分鐘)修改省份實(shí)體類Province及對(duì)應(yīng)的映射文件Province.hbm.xml修改用戶實(shí)體類User及對(duì)應(yīng)的映射文件User.hbm.xmldao層:修改類QueryDao.,修改條件查詢的相關(guān)代碼service層:修改類QueryService,修改業(yè)務(wù)處理代碼action層:修改類QueryAction調(diào)試運(yùn)行詳細(xì)步驟修改省份實(shí)體類Province及對(duì)應(yīng)的映射文件Province.hbm.xmlProvince類中去掉集合成員變量users,關(guān)鍵代碼如下:publicclassProvince{ intid;//省份流水號(hào) Stringname;//省份名稱 Stringnote;//描述 //以下省略每個(gè)成員變量的get/set方法}Province.hbm.xml映射文件中去掉users集合變量的配置,關(guān)鍵代碼如下:<hibernate-mappingpackage="com.zdsoft.domain"> <classname="Province"> <idname="id"column="id"> <generatorclass="native"/> </id> <propertyname="name"/> <propertyname="note"/> <setname="users"cascade="save-update"lazy="false"> <keycolumn="province"/> <one-to-manyclass="User"/> </set> </class></hibernate-mapping>注:user表(用戶)與province表(省份)是多對(duì)一的關(guān)系,user是“多”方,province是“一”方,多對(duì)一關(guān)系在“多”方進(jìn)行配置,“一”方無(wú)需配置,故Province實(shí)體類及對(duì)應(yīng)的映射文件中可以去掉users的相關(guān)配置。修改用戶實(shí)體類User及對(duì)應(yīng)的映射文件User.hbm.xml修改com.zdsoft.domain包下的User.類,增加成員變量province(省份),類型為Province同時(shí)增加對(duì)應(yīng)的get/set方法。User類的關(guān)鍵代碼如下:publicclassUser{ intid; Stringname; StringuserName; Stringpassword; Stringsex; intage; Datebirth; Stringmobile; Stringhobbies; Stringemail; Provinceprovince; //以下省略每個(gè)成員變量的get/set方法}同樣地,將對(duì)應(yīng)的映射文件User.hbm.xml中增加關(guān)于province的配置,關(guān)鍵代碼如下:<hibernate-mappingpackage="com.zdsoft.domain"> <classname="User"> <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <propertyname="password"/> <propertyname="userName"/> <propertyname="sex"/> <propertyname="age"/> <propertyname="birth"/> <propertyname="mobile"/> <propertyname="email"/> <propertyname="hobbies"/> <many-to-onename="province"column="province" class="Province"fetch="select"not-null="true"lazy="false"/> </class></hibernate-mapping>dao層:修改類QueryDao.,添加條件查詢的相關(guān)代碼修改成員方法query中的hsql語(yǔ)句(查詢的實(shí)體類從Province改為User),并修改返回值類型(將List<Province>改為L(zhǎng)ist<User>),關(guān)鍵代碼如下:publicclassQueryDao{ //使用hibernate框架創(chuàng)建sessionFactory對(duì)象 SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory(); publicList<User>query(Stringprovince){ List<User>ret=null; //編寫查詢的hibernate框架特有的sql語(yǔ)句 Stringhql="fromUserwhere1=1"; if(null!=province&&!"".equals(province)){ hql=hql+"and='"+province+"'"; }else{ returnnull;//若沒(méi)有輸入省份,查詢結(jié)果是無(wú)意義的,直接返回null。 } Sessionsession=sessionFactory.openSession(); try{ Queryquery=session.createQuery(hql); ret=query.list(); }catch(HibernateExceptione){ e.printStackTrace(); ret=null; }finally{ if(session!=null){ session.close(); } } returnret; }}service層:修改類QueryService,修改業(yè)務(wù)處理代碼修改QueryService類query方法返回值類型(將List<Province>改為L(zhǎng)ist<User>),關(guān)鍵代碼如下:publicclassQueryService{ privateQueryDaoqueryDao=newQueryDao(); publicList<User>query(StringqueryProvince){ returnqueryDao.query(queryProvince); }}action層:修改類QueryAction修改成員變量users的類型(從Set<User>改為L(zhǎng)ist<User>),并修改query方法中對(duì)service層的業(yè)務(wù)調(diào)用代碼。關(guān)鍵代碼如下:publicclassQueryAction{privateStringqueryProvince;//查詢條件:省份privateQueryServiceregisterService=newQueryService();//業(yè)務(wù)處理類privateList<User>users=null;//查詢的結(jié)果publicStringquery(){ users=registerService.query(queryProvince); if(users==null||users.isEmpty()){ return"error"; }else{ return"success"; }}//以下省略成語(yǔ)變量的get/set方法}調(diào)試運(yùn)行首先,準(zhǔn)備與上節(jié)任務(wù)一樣的查詢的數(shù)據(jù),參考如圖3.2-5a、圖3.2-5b所示。然后將工程發(fā)布到服務(wù)器,啟動(dòng)服務(wù)器,運(yùn)行頁(yè)面query.jsp,在查詢條件中輸入重慶,其結(jié)果與上節(jié)任務(wù)一樣(如圖3.2-5c所示)。根據(jù)任務(wù)提出問(wèn)題(45-55分鐘)什么是多對(duì)一關(guān)系?如何使用hibernate完成多表查詢?問(wèn)題解析(45-55分鐘)什么是多對(duì)一關(guān)系?在前面章節(jié)提到一對(duì)多的關(guān)系:對(duì)于主表和從表存在外鍵的對(duì)應(yīng)關(guān)系我們稱之為一對(duì)多關(guān)系,反過(guò)來(lái),從表對(duì)主表的關(guān)系即是多對(duì)一的關(guān)系。例如在數(shù)據(jù)庫(kù)中存在班級(jí)表和學(xué)生表兩張表,班級(jí)表中存在主鍵:班級(jí)號(hào),學(xué)生表中存在非主鍵:班級(jí)號(hào),學(xué)生表中的非主鍵字段班級(jí)號(hào)的值來(lái)源于班級(jí)表中的主鍵班級(jí)號(hào),因此,學(xué)生表與班級(jí)表就是多對(duì)一的關(guān)系。從現(xiàn)實(shí)世界來(lái)看:即是有多個(gè)學(xué)生在同一個(gè)班級(jí),學(xué)生對(duì)班級(jí)就是多對(duì)一。實(shí)現(xiàn)多對(duì)一查詢:以學(xué)生信息管理系統(tǒng)根據(jù)班級(jí)號(hào)查詢學(xué)生信息為例【例子3.3-1】在學(xué)生信息管理系統(tǒng)中班級(jí)與學(xué)生之間存在著這樣的關(guān)系:多個(gè)學(xué)生屬于同一個(gè)班級(jí)。這是典型的多對(duì)一關(guān)聯(lián)關(guān)系,對(duì)應(yīng)到hibernate的對(duì)象模型中是單向多對(duì)一映射。要求使用hibernate多對(duì)一單向映射實(shí)現(xiàn)查詢功能:根據(jù)班級(jí)名稱查詢?cè)摪嗉?jí)所有學(xué)生的信息,并把學(xué)生信息列表顯示在查詢頁(yè)面中。在數(shù)據(jù)庫(kù)中學(xué)生表與班級(jí)表結(jié)構(gòu)與【例子3.2-1】一樣,請(qǐng)參見(jiàn)表3.2-2a、表3.2-2b所示。步驟1:在eclipse中創(chuàng)建web工程studentInfoManage,并把hibernate,struts2及數(shù)據(jù)庫(kù)所需的jar包拷貝到工程WebContent/WEB-INF/lib目錄下。步驟2:在工程中src目錄下創(chuàng)建com.zdsoft.domain并在該包路徑下創(chuàng)建學(xué)生實(shí)體類Student和對(duì)應(yīng)的映射文件Student.hbm.xml。實(shí)體類Student的關(guān)鍵代碼如下:publicclassStudent{ privateintid; privateStringstudentName; privateStringstudentNo; privateStringsex; privateintage; privateClazzclazz;//多對(duì)一關(guān)系的處理//以下省略成員變量的get/set方法}代碼說(shuō)明:在多對(duì)一的配置中,Student類中的成員變量clazz對(duì)應(yīng)到表student中的clazz_id這個(gè)外鍵字段,因而clazz不是一個(gè)普通的類型,必須被定義為Clazz類型。映射文件Student.hbm.xml的關(guān)鍵代碼如下: <classname="Student"> <idname="id"> <generatorclass="native"/> </id> <propertyname="studentName"/> <propertyname="studentNo"/> <propertyname="sex"/> <propertyname="age"/> <many-to-onename="clazz"column="clazz_id" class="Clazz"fetch="select"not-null="true"lazy="false"/> </class>代碼說(shuō)明:many-to-one節(jié)點(diǎn)配置多對(duì)一關(guān)系中的“一”方實(shí)體類,其中name屬性指定多方實(shí)體類中的成員變量,column指定多方表(從表)中的外鍵字段,class屬性就是“一”方的實(shí)體類名,lazy=”true”表示不使用延遲加載。本例表示實(shí)體類Student與實(shí)體類Clazz是一對(duì)多關(guān)系,兩者通過(guò)外鍵clazz_id關(guān)聯(lián)起來(lái)。步驟3:在工程中com.zdsoft.domain包路徑下創(chuàng)建班級(jí)的實(shí)體類Clazz和映射文件Clazz.hbm.xml,因?yàn)槭沁M(jìn)行多對(duì)一的配置,關(guān)聯(lián)配置都在多方,對(duì)于“一”方無(wú)需關(guān)聯(lián)配置。Clazz.hbm.xml關(guān)鍵代碼如下:<hibernate-mappingpackage="com.zdsoft.domain"> <classname="Clazz"> <idname="id"column="clazz_id"> <generatorclass="native"/> </id> <propertyname="clazzNo"/> <propertyname="clazzName"/> <propertyname="department"/> </class></hibernate-mapping>Clazz關(guān)鍵代碼如下:publicclassClazz{ privateintid; privateStringclazzNo; privateStringclazzName; privateStringdepartment; //以下省略各個(gè)成員變量的get/set方法}步驟4:在src下創(chuàng)建com.zdsoft.dao包,并在該包下創(chuàng)建類ClazzDao,在類中新建根據(jù)班級(jí)id查詢學(xué)生信息的方法findStudentByClazzId,關(guān)鍵代碼如下:publicclassClazzDao{ //使用hibernate框架創(chuàng)建sessionFactory對(duì)象 SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory(); publicList<Student>findStudentByClazzId(StringclazzName){ List<Student>ret=null; //編寫查詢的hibernate框架特有的sql語(yǔ)句 Stringhql="fromStudentwhereclazz.clazzName='"+clazzName+"'"; Sessionsession=sessionFactory.openSession(); try{ Queryquery=session.createQuery(hql); ret=query.list(); }catch(HibernateExceptione){ e.printStackTrace(); ret=null; }finally{ if(session!=null){ session.close(); } } returnret; }}代碼說(shuō)明:在上述hibernate的sql語(yǔ)句中的where子句——clazz.clazzName=’"+clazzName+”’”的含義是,實(shí)體類Student的屬性clazz中的clazzName屬性的值與查詢輸入的條件clazzName相匹配,即是實(shí)體類Student根據(jù)clazz_id外鍵所關(guān)聯(lián)的Clazz實(shí)體類中的班級(jí)名clazzName與查詢輸入的班級(jí)名clazzName進(jìn)行查詢匹配。若翻譯成sql語(yǔ)句則是:select*fromstudent,clazzwherestudent.clazz_id=clazz.idandclazz.clazzName=查詢輸入條件clazzName變量的值步驟5:在hibernate.cfg.xml文件中的session-factory節(jié)點(diǎn)中加入實(shí)體類的映射文件:<mappingresource="com/zdsoft/domain/Student.hbm.xml"/><mappingresource="com/zdsoft/domain/Clazz.hbm.xml"/>代碼說(shuō)明:將班級(jí)、學(xué)生實(shí)體類的映射文件加入到全局配置文件hibernate.cfg.xml中。步驟6:在該工程src創(chuàng)建com.zdsoft.action包,并在該包下創(chuàng)建類ClazzAction,關(guān)鍵代碼如下:publicclassClazzAction{ privateStringclazzName; privateClazzDaoclazzDao=newClazzDao(); privateList<Student>students=newArrayList(); publicStringexecute()throwsException{ students=clazzDao.findStudentByClazzId(this.clazzName); if(students!=null){ return"success"; }else{ return"error"; } } //以下省略成員變量的get/set方法}代碼說(shuō)明:該類中定義了三個(gè)成員變量。其中clazzName用來(lái)接收頁(yè)面上傳遞的班級(jí)名稱的值。Students集合變量用來(lái)保存查詢的學(xué)生信息(多條),并傳遞到頁(yè)面顯示。clazzDao用來(lái)完成數(shù)據(jù)庫(kù)數(shù)據(jù)的查詢功能。步驟7:在該工程WebContent或WebRoot目錄下創(chuàng)建studentmanage.jsp頁(yè)面和失敗頁(yè)面errors.jsp,查詢頁(yè)面studentmanage.jsp的關(guān)鍵代碼如下:<body> 歡迎來(lái)到學(xué)生信息管理系統(tǒng) <s:form

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論