《JavaEE框架技術(shù)》課件03MyBatis復(fù)雜查詢-鑒別器_第1頁
《JavaEE框架技術(shù)》課件03MyBatis復(fù)雜查詢-鑒別器_第2頁
《JavaEE框架技術(shù)》課件03MyBatis復(fù)雜查詢-鑒別器_第3頁
《JavaEE框架技術(shù)》課件03MyBatis復(fù)雜查詢-鑒別器_第4頁
《JavaEE框架技術(shù)》課件03MyBatis復(fù)雜查詢-鑒別器_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論