版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第3章Mybatis復(fù)雜查詢(xún)框架程序設(shè)計(jì)(Java)2學(xué)習(xí)目標(biāo)mybatis的關(guān)聯(lián)查詢(xún)2mybatis的集合查詢(xún)3mybatis的鑒別器4自定義映射關(guān)系13擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】回顧以前使用mybatis進(jìn)行數(shù)據(jù)操作的方式:List<Employee>list=sqlSession.selectList("findEmployees");下面給大家介紹另外一種方式:使用接口完成數(shù)據(jù)操作——或者說(shuō)在以前的基礎(chǔ)上增加了一個(gè)接口層4擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第一步:創(chuàng)建一個(gè)接口publicinterfaceUserDao{ List<Map<String,Object>>findAllUser();}接口中方法定義的規(guī)則:接口中的方法名和sql配置文件中定義的id一致接口方法輸入?yún)?shù)類(lèi)型要和配置文件中定義的parameterType一致接口返回?cái)?shù)據(jù)類(lèi)型要和配置文件中定義的resultType一致5擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第二步:通過(guò)namespace關(guān)聯(lián)接口和配置文件<mappernamespace="dao.UserDao">第三步:調(diào)用接口訪(fǎng)問(wèn)數(shù)據(jù)UserDaodao=sqlSession.getMapper(UserDao.class);List<Map<String,Object>>list=dao.findAllUser();6擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第一步:創(chuàng)建一個(gè)接口publicinterfaceUserDao{ List<Map<String,Object>>findAllUser();}接口中方法定義的規(guī)則:接口中的方法名和sql配置文件中定義的id一致接口方法輸入?yún)?shù)類(lèi)型要和配置文件中定義的parameterType一致接口返回?cái)?shù)據(jù)類(lèi)型要和配置文件中定義的resultType一致7擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第二步:通過(guò)namespace關(guān)聯(lián)接口和配置文件<mappernamespace="dao.UserDao">第三步:調(diào)用接口訪(fǎng)問(wèn)數(shù)據(jù)UserDaodao=sqlSession.getMapper(UserDao.class);List<Map<String,Object>>list=dao.findAllUser();8擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】這個(gè)接口層又稱(chēng)為dao層dao層:DataAccessObject數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象層 ——用于對(duì)表進(jìn)行簡(jiǎn)單的增刪改查操作軟件三層架構(gòu):94鑒別器-任務(wù)描述例子:在例1(多對(duì)一)的基礎(chǔ)上,按性別分類(lèi)查詢(xún)表名employee(雇員信息表)username用戶(hù)名字符串10位主鍵password密碼字符串6位非空deptid部門(mén)id整型外鍵sex性別整型(取值0=女1=男)表名department(部門(mén)信息表)id部門(mén)id整型自動(dòng)遞增主鍵name部門(mén)名稱(chēng)字符串10位非空數(shù)據(jù)要求mybatis框架,mysql數(shù)據(jù)庫(kù),查詢(xún)employee表所有記錄,按性別輸出用戶(hù)名、對(duì)應(yīng)部門(mén)名稱(chēng)、性別男或者女103鑒別器-任務(wù)分析該任務(wù)用sql語(yǔ)句描述,要執(zhí)行兩個(gè)sql語(yǔ)句查詢(xún)所有女雇員select*fromemployee,departmentwhereemployee.deptid=department.idandsex=0查詢(xún)所有男雇員select*fromemployee,departmentwhereemployee.deptid=department.idandsex=1113鑒別器創(chuàng)建部門(mén)數(shù)據(jù)封裝類(lèi)domain.DepartmentpublicclassDepartment{intid;Stringname;//這里省略對(duì)應(yīng)的get,set方法}123鑒別器創(chuàng)建用戶(hù)數(shù)據(jù)封裝類(lèi)domain.EmployeepublicclassEmployee{Stringname;Stringpass;Stringdeptid;Departmentdept;//這里省略對(duì)應(yīng)的get,set方法}說(shuō)明:dept代表部門(mén),可以體現(xiàn)一個(gè)雇員屬于一個(gè)部門(mén),這樣,就可以通過(guò)Employee類(lèi)得到部門(mén)數(shù)據(jù)。133鑒別器創(chuàng)建分別裝男和女的兩個(gè)數(shù)據(jù)封裝類(lèi)(實(shí)體類(lèi)),繼承Employee類(lèi),并添加一個(gè)sex屬性:publicclassFemaleEmployee
extendsEmployee{Stringsex;Stringgender="女";//此處省略get、set方法}publicclassMaleEmployee
extendsEmployee{Stringsex;Stringgender="男";//此處省略get、set方法}說(shuō)明:創(chuàng)建這個(gè)兩個(gè)類(lèi),就是為了讓mybatis把查詢(xún)的結(jié)果按照性別的不同分別裝載數(shù)據(jù)143鑒別器-任務(wù)分析配置第一個(gè)sql,查詢(xún)男性雇員resultMap配置如下:
<resultMapid="maleEmployee"type="domain.MaleEmployee"
extends="employee"><resultproperty="sex"column="sex"/></resultMap>說(shuō)明:extends:直接使用父類(lèi)的映射關(guān)系SQL配置如下:<selectid="findMaleEmployees"resultMap="maleEmployee"> select*from employee,department whereemployee.deptid=department.idandsex=1 </select>153鑒別器-任務(wù)分析配置第二個(gè)sql,查詢(xún)女性雇員resultMap配置如下:
<resultMapid="femaleEmployee"type="domain.FemaleEmployee"extends="employee"><resultproperty="sex"column="sex"/></resultMap>SQL配置如下:<selectid="findFeMaleEmployees"resultMap="femaleEmployee"> select*from employee,department whereemployee.deptid=department.idandsex=0 </select>163鑒別器現(xiàn)在使用mybatis框架,可以使用一個(gè)sql語(yǔ)句:select*fromuser,departmentwhereuser.deptid=department.id那么接下來(lái)該怎么做呢?173鑒別器-步驟1找到mapper.UserMapper.xml文件在多對(duì)一映射配置的<resultMap>里增加鑒別器(選擇性裝載數(shù)據(jù))<resultMapid="employee"type="domain.Employee"> <idproperty="name"column="username"/> <resultproperty="pass"column="password"/> <resultproperty="deptid"column="deptid"/> <associationproperty="dept"javaType="domain.Department"> <idproperty="id"column="id"/> <resultproperty="name"column="deptname"/> </association>
<discriminatorjavaType="string"column="sex"><casevalue="0"resultType="domain.FemaleEmployee"><resultproperty="sex"column="sex"></result></case><casevalue="1"resultType="domain.MaleEmployee"><resultproperty="sex"column="sex"></result></case></discriminator> </resultMap>183鑒別器-步驟1說(shuō)明<discriminatorjavaType="string"column="sex">根據(jù)sex字段的值設(shè)置鑒別器,在java中類(lèi)型為string<casevalue="0"resultType="domain.FemaleEmployee">當(dāng)sex字段值為0時(shí),把整條數(shù)據(jù)裝載到FemaleEmployee類(lèi)中<resultproperty="sex"column="sex">性別sex字段值放在java類(lèi)FemaleEmployee的sex屬性中<casevalue="1"resultType="domain.MaleEmployee"/>當(dāng)sex字段值為1時(shí),把整條數(shù)據(jù)裝載到MaleEmployee類(lèi)中193鑒別器-步驟2在測(cè)試類(lèi)中修改執(zhí)行的關(guān)鍵代碼//3.執(zhí)行sql語(yǔ)句List<Employee>list=sqlSession.selectList("findEmployees");//4.輸出結(jié)果for(Employeeitem:list){if(MaleEmployee.class.isInstance(item)){MaleEmployeemEmployee=(MaleEmployee)item;System.out.println(mEmployee.getName()+":"+mEmployee.getDept().getName()+":"+mEmployee.getGender());}else{FemaleEmployee
fEmployee=(FemaleEmployee)item;System.out.println(fEmployee.getName()+":"+fEmployee.getDept().getName()+":"+fEmployee.getGender());}}說(shuō)明:在輸出時(shí)要判斷item對(duì)象是MaleEmployee還是FemaleEmployee203鑒別器-結(jié)果探討使用鑒別器,能夠根據(jù)表中某字段值的不同,將查詢(xún)出來(lái)的數(shù)據(jù)分類(lèi)存放本例就是根據(jù)employee表中性別字段的值不同而使用鑒別器將查詢(xún)結(jié)果分類(lèi)裝載到FemaleEmployee和MaleEmployee的對(duì)象中需要注意的是,在構(gòu)造FemaleEmployee與MaleEmployee類(lèi)的時(shí)候,它們是繼承Employee類(lèi)的,Employee類(lèi)應(yīng)該包含兩個(gè)子類(lèi)的公共部分屬性213鑒別器-作業(yè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款合同利息條款的范例分析
- 環(huán)保節(jié)能洗車(chē)合同
- 共享服務(wù)合同范本在線(xiàn)問(wèn)答
- 簽訂勞務(wù)分包合同的注意事項(xiàng)解析
- 預(yù)購(gòu)合同的風(fēng)險(xiǎn)評(píng)估
- 保證書(shū)范文撰寫(xiě)心得
- 教輔資料購(gòu)銷(xiāo)協(xié)議
- 預(yù)訂住房合同協(xié)議
- 三年級(jí)積極參與保證
- 保安服務(wù)提供合同
- 髕骨骨折手術(shù)后注意休息和飲食
- 水產(chǎn)動(dòng)物增養(yǎng)殖學(xué)蝦蟹類(lèi)增養(yǎng)殖終極版
- 2024年全新學(xué)校物業(yè)管理服務(wù)方案
- 飲片車(chē)間制遠(yuǎn)志生產(chǎn)崗位操作規(guī)程
- 刑事辯護(hù)與犯罪辯解高級(jí)辯護(hù)技巧與戰(zhàn)略
- 養(yǎng)老護(hù)理員相關(guān)法律法規(guī)知識(shí)培訓(xùn)
- 地鐵運(yùn)營(yíng)公司工務(wù)線(xiàn)路維修標(biāo)準(zhǔn)
- 2021年全國(guó)普通高等學(xué)校招生統(tǒng)一考試語(yǔ)文試卷 全國(guó)甲卷(含解析)
- 馬克思主義新聞思想智慧樹(shù)知到課后章節(jié)答案2023年下河北大學(xué)
- 高數(shù)1-7章總復(fù)習(xí)
- 《眼鏡學(xué)》考試復(fù)習(xí)重點(diǎn)題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論