版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第3章Mybatis復(fù)雜查詢框架程序設(shè)計(Java)2學(xué)習(xí)目標(biāo)mybatis的關(guān)聯(lián)查詢2mybatis的集合查詢3mybatis的鑒別器4自定義映射關(guān)系13擴展:使用接口方式完成數(shù)據(jù)操作【可選】回顧以前使用mybatis進行數(shù)據(jù)操作的方式:List<Employee>list=sqlSession.selectList("findEmployees");下面給大家介紹另外一種方式:使用接口完成數(shù)據(jù)操作——或者說在以前的基礎(chǔ)上增加了一個接口層4擴展:使用接口方式完成數(shù)據(jù)操作【可選】第一步:創(chuàng)建一個接口publicinterfaceUserDao{ List<Map<String,Object>>findAllUser();}接口中方法定義的規(guī)則:接口中的方法名和sql配置文件中定義的id一致接口方法輸入?yún)?shù)類型要和配置文件中定義的parameterType一致接口返回數(shù)據(jù)類型要和配置文件中定義的resultType一致5擴展:使用接口方式完成數(shù)據(jù)操作【可選】第二步:通過namespace關(guān)聯(lián)接口和配置文件<mappernamespace="dao.UserDao">第三步:調(diào)用接口訪問數(shù)據(jù)UserDaodao=sqlSession.getMapper(UserDao.class);List<Map<String,Object>>list=dao.findAllUser();6擴展:使用接口方式完成數(shù)據(jù)操作【可選】第一步:創(chuàng)建一個接口publicinterfaceUserDao{ List<Map<String,Object>>findAllUser();}接口中方法定義的規(guī)則:接口中的方法名和sql配置文件中定義的id一致接口方法輸入?yún)?shù)類型要和配置文件中定義的parameterType一致接口返回數(shù)據(jù)類型要和配置文件中定義的resultType一致7擴展:使用接口方式完成數(shù)據(jù)操作【可選】第二步:通過namespace關(guān)聯(lián)接口和配置文件<mappernamespace="dao.UserDao">第三步:調(diào)用接口訪問數(shù)據(jù)UserDaodao=sqlSession.getMapper(UserDao.class);List<Map<String,Object>>list=dao.findAllUser();8擴展:使用接口方式完成數(shù)據(jù)操作【可選】這個接口層又稱為dao層dao層:DataAccessObject數(shù)據(jù)訪問對象層 ——用于對表進行簡單的增刪改查操作軟件三層架構(gòu):94鑒別器-任務(wù)描述例子:在例1(多對一)的基礎(chǔ)上,按性別分類查詢表名employee(雇員信息表)username用戶名字符串10位主鍵password密碼字符串6位非空deptid部門id整型外鍵sex性別整型(取值0=女1=男)表名department(部門信息表)id部門id整型自動遞增主鍵name部門名稱字符串10位非空數(shù)據(jù)要求mybatis框架,mysql數(shù)據(jù)庫,查詢employee表所有記錄,按性別輸出用戶名、對應(yīng)部門名稱、性別男或者女103鑒別器-任務(wù)分析該任務(wù)用sql語句描述,要執(zhí)行兩個sql語句查詢所有女雇員select*fromemployee,departmentwhereemployee.deptid=department.idandsex=0查詢所有男雇員select*fromemployee,departmentwhereemployee.deptid=department.idandsex=1113鑒別器創(chuàng)建部門數(shù)據(jù)封裝類domain.DepartmentpublicclassDepartment{intid;Stringname;//這里省略對應(yīng)的get,set方法}123鑒別器創(chuàng)建用戶數(shù)據(jù)封裝類domain.EmployeepublicclassEmployee{Stringname;Stringpass;Stringdeptid;Departmentdept;//這里省略對應(yīng)的get,set方法}說明:dept代表部門,可以體現(xiàn)一個雇員屬于一個部門,這樣,就可以通過Employee類得到部門數(shù)據(jù)。133鑒別器創(chuàng)建分別裝男和女的兩個數(shù)據(jù)封裝類(實體類),繼承Employee類,并添加一個sex屬性:publicclassFemaleEmployee
extendsEmployee{Stringsex;Stringgender="女";//此處省略get、set方法}publicclassMaleEmployee
extendsEmployee{Stringsex;Stringgender="男";//此處省略get、set方法}說明:創(chuàng)建這個兩個類,就是為了讓mybatis把查詢的結(jié)果按照性別的不同分別裝載數(shù)據(jù)143鑒別器-任務(wù)分析配置第一個sql,查詢男性雇員resultMap配置如下:
<resultMapid="maleEmployee"type="domain.MaleEmployee"
extends="employee"><resultproperty="sex"column="sex"/></resultMap>說明:extends:直接使用父類的映射關(guān)系SQL配置如下:<selectid="findMaleEmployees"resultMap="maleEmployee"> select*from employee,department whereemployee.deptid=department.idandsex=1 </select>153鑒別器-任務(wù)分析配置第二個sql,查詢女性雇員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框架,可以使用一個sql語句:select*fromuser,departmentwhereuser.deptid=department.id那么接下來該怎么做呢?173鑒別器-步驟1找到mapper.UserMapper.xml文件在多對一映射配置的<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說明<discriminatorjavaType="string"column="sex">根據(jù)sex字段的值設(shè)置鑒別器,在java中類型為string<casevalue="0"resultType="domain.FemaleEmployee">當(dāng)sex字段值為0時,把整條數(shù)據(jù)裝載到FemaleEmployee類中<resultproperty="sex"column="sex">性別sex字段值放在java類FemaleEmployee的sex屬性中<casevalue="1"resultType="domain.MaleEmployee"/>當(dāng)sex字段值為1時,把整條數(shù)據(jù)裝載到MaleEmployee類中193鑒別器-步驟2在測試類中修改執(zhí)行的關(guān)鍵代碼//3.執(zhí)行sql語句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());}}說明:在輸出時要判斷item對象是MaleEmployee還是FemaleEmployee203鑒別器-結(jié)果探討使用鑒別器,能夠根據(jù)表中某字段值的不同,將查詢出來的數(shù)據(jù)分類存放本例就是根據(jù)employee表中性別字段的值不同而使用鑒別器將查詢結(jié)果分類裝載到FemaleEmployee和MaleEmployee的對象中需要注意的是,在構(gòu)造FemaleEmployee與MaleEmployee類的時候,它們是繼承Employee類的,Employee類應(yīng)該包含兩個子類的公共部分屬性213鑒別器-作業(yè)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路防洪應(yīng)急預(yù)案
- 多聯(lián)機施工組織方案
- 小學(xué)推廣普通話活動方案
- 隔墻施工合同
- 引進博士人才協(xié)議書
- 學(xué)校食堂凍品采購合同
- 店鋪轉(zhuǎn)讓出兌合同協(xié)議書
- 植入類與介入類醫(yī)療器械購入、使用登記制度
- 畜牧獸醫(yī)專業(yè)技術(shù)工作總結(jié)
- 隧道管理制度
- 電力設(shè)備行業(yè)概況分析報告
- 顧客滿意理念與技巧課件
- 華住會酒店員工手冊
- 威海畢家疃村改造規(guī)劃方案
- 產(chǎn)業(yè)投資公司招聘考試題
- 門頭溝文明城規(guī)劃方案
- 【課件】+現(xiàn)實與理想-西方古典繪畫+課件高中美術(shù)人美版(2019)美術(shù)鑒賞
- 客戶經(jīng)理關(guān)鍵素質(zhì)課件
- 2023-2024學(xué)年北師大版(2019)必修 第三冊Unit 7 Art Lesson 3 A Musical Genius名師教學(xué)設(shè)計
- MKVIe培訓(xùn)教材課件
- 玻璃體積血的護理查房
評論
0/150
提交評論