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

下載本文檔

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

文檔簡(jiǎn)介

1第3章Mybatis復(fù)雜查詢框架程序設(shè)計(jì)(Java)2學(xué)習(xí)目標(biāo)mybatis的關(guān)聯(lián)查詢2mybatis的集合查詢3mybatis的鑒別器4自定義映射關(guān)系132mybatis的關(guān)聯(lián)查詢-目錄1)聯(lián)合查詢2)構(gòu)造查詢3)子查詢42.2構(gòu)造查詢【可選】回顧上節(jié)課自定義映射關(guān)系resultMap的配置:<resultMaptype="domain.User"id="user"><idproperty="name"column="username"/><resultproperty="pass"column="password"/></resultMap>id、result是用來配置實(shí)體類(domain.User)中的屬性與數(shù)據(jù)庫字段的映射關(guān)系的。id、result的本質(zhì)其實(shí)是mybatis根據(jù)我們自定義的映射關(guān)系使用反射將數(shù)據(jù)庫查詢結(jié)果中字段的值填充到實(shí)體類對(duì)應(yīng)的屬性中的以上是使用id、result的方式定義映射,還有一種方式是使用構(gòu)造函數(shù)的方式來定義映射52.2構(gòu)造查詢【可選】首先在domain.User加入構(gòu)造方法:publicclassUser{ privateStringname; privateStringpass;

publicUser(Stringname,Stringpass){ =name; this.pass=pass; }省略get、set方法}62.2構(gòu)造查詢【可選】修改resultMap標(biāo)簽:<resultMapid="user"type="domain.User">

<constructor> <argcolumn="username"javaType="String"/> <argcolumn="password"javaType="String"/> </constructor> </resultMap>constructor標(biāo)簽的含義就是使用構(gòu)造函數(shù)來定義映射關(guān)系注意參數(shù)的順序以及為每一個(gè)參數(shù)指定javaType72.3子查詢-任務(wù)描述例子3:在例子1的基礎(chǔ)上,進(jìn)行子查詢表名employee(雇員信息表)username用戶名字符串10位主鍵password密碼字符串6位非空deptid部門id整型外鍵表名department(部門信息表)id部門id整型自動(dòng)遞增主鍵deptname部門名稱字符串10位非空數(shù)據(jù)要求用mybatis框架編程,mysql數(shù)據(jù)庫,查詢employee表的所有記錄,輸出用戶名和該用戶所在的部門名稱82.3子查詢-分析子查詢過程二階段查詢階段1:查詢雇員表所有記錄select*fromemployee階段2:從階段1的查詢結(jié)果中循環(huán)取出每條記錄的deptid字段值,查詢department表中id=deptid字段值的記錄for(inti=0;i<雇員表的記錄數(shù);i++){intdeptid=階段1中查詢結(jié)果的下一條記錄的deptid字段值;select*fromdepartmentwhereid=deptid}綜合階段1和2的結(jié)果就能夠得到本例子要求的結(jié)果這種二階段查詢的方式稱之為子查詢92.3子查詢-分析子查詢過程上面的分析中涉及兩個(gè)SQL語句select*fromemployee---查詢出所有用戶select*fromdepartmentwhereid=#{deptid}--根據(jù)部門id獲取部門因此,首先我們?cè)赟QL配置文件中加入這兩個(gè)SQl的配置102.3子查詢-分析子查詢過程select*fromemployee---查詢出所有雇員配置如下:<resultMapid="employee"type="domain.Employee">

<idproperty="name"column="username"/> <resultproperty="pass"column="password"/> <resultproperty="deptid"column="deptid"/></resultMap><selectid="findAllEmployees"resultMap="employee"> select*fromemployee </select>112.3子查詢-分析子查詢過程select*fromdepartmentwhereid=#{deptid}--根據(jù)部門id獲取部門配置如下:<resultMapid="department"type="domain.Department">

<idproperty="id"column="id"/> <resultproperty="name"column="deptname"/> </resultMap><selectid="findDeptById"parameterType="int"resultMap="department"> select*fromdepartmentwhereid=#{deptid}</select>122.3子查詢-分析子查詢過程select*fromemployee---查詢出所有用戶配置如下:<resultMapid="employee"type="domain.Employee"> <idproperty="name"column="username"/> <resultproperty="pass"column="password"/> <resultproperty="deptid"column="deptid"/><associationproperty="dept"javaType="domain.Department"column="deptid"select="findDeptById"> </association></resultMap><selectid="findAllEmployees"resultMap="employee"> select*fromemployee </select>13技巧學(xué)習(xí):如何在eclipse中使用調(diào)試在需要調(diào)試代碼的地方打斷點(diǎn)14技巧學(xué)習(xí):如何在eclipse中使用調(diào)試Debug方式運(yùn)行程序15技巧學(xué)習(xí):如何在eclipse中使用調(diào)試F6:運(yùn)行至下一句代碼F8:直接運(yùn)行跳轉(zhuǎn)到下一個(gè)斷點(diǎn)將鼠標(biāo)移至變量上查看運(yùn)行中的值或者將變量添加到窗口中查看16技巧學(xué)習(xí):如何在eclipse中使用調(diào)試17技巧學(xué)習(xí):如何在eclipse中使用調(diào)試183集合查詢-任務(wù)描述例子4:集合查詢表名employee(雇員信息表)username用戶名字符串10位主鍵password密碼字符串6位非空deptid部門id整型外鍵表名department(部門信息表)id部門id整型自動(dòng)遞增主鍵deptname部門名稱字符串10位非空數(shù)據(jù)要求用mybatis框架編程,mysql數(shù)據(jù)庫,查詢employee表的所有記錄,輸出用戶名和該用戶所在的部門名稱,使用1對(duì)多查詢的方式。193集合查詢-分析一個(gè)雇員屬于一個(gè)部門一個(gè)部門包含多個(gè)雇員因此,雇員和部門是多對(duì)一的關(guān)系、部門和雇員是一對(duì)多的關(guān)系如果題目要求我們使用多對(duì)一的查詢,我們站在雇員的角度,Employee中包含一個(gè)Department如果題目要求我們使用一對(duì)多的查詢,我們站在部門的角度,一個(gè)Department包含多個(gè)Employee因此,實(shí)體類代碼結(jié)構(gòu)修改如下:203集合查詢-分析domain.Employee實(shí)體類:publicclassEmployee{ privateStringname; privateStringpass; privateintdeptid;省略get,set方法}213集合查詢-分析domain.Department實(shí)體類:publicclassDepartment{ privateintid; privateStringname;

privateList<Employee>employees;//多個(gè)雇員(是個(gè)集合)省略get,set方法}223集合查詢-步驟1在<mapper>里修改查詢結(jié)果類型映射resultMap標(biāo)簽配置<resultMapid="deptMap"type="domain.Department"> <idproperty="id"column="id"/> <resultproperty="name"column="deptname"/>

<collectionproperty="employees"javaType="ArrayList"ofType="domain.Employee"> <idproperty="name"column="username"/> <resultproperty="pass"column="password"/> <resultproperty="deptid"column="deptid"/> </collection> </resultMap>說明:collection標(biāo)簽是用來配置集合的collectionproperty=“employees“對(duì)應(yīng)于java實(shí)體類中employees屬性,顯而易見,它是arraylist集合類型javaType=”ArrayList”,里邊的類型必定是Employee,則ofType="domain.Employee“233集合查詢-步驟2修改SQL配置中的resultMap屬性值<selectid="findDepts"resultMap="deptMap"> select*from employee,department whereemployee.deptid=department.id </select>243集合查詢-調(diào)試運(yùn)行及探討在app.Test類中執(zhí)行如下代碼//3.執(zhí)行sql語句List<Department>list=sqlSession.selectList("findDepts");//4.輸出結(jié)果for(Departmentdept:list){ List<Employee>employees=dept.getEmployees(); for(Employeeitem:employees){System.out.println(item.getName()+":"+dept.getName()); } }最后結(jié)果與例1沒有任何區(qū)別25擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】回顧以前使用mybatis進(jìn)行數(shù)據(jù)操作的方式:List<Employee>list=sqlSession.selectList("findEmployees");下面給大家介紹另外一種方式:使用接口完成數(shù)據(jù)操作——或者說在以前的基礎(chǔ)上增加了一個(gè)接口層26擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第一步:創(chuàng)建一個(gè)接口publicinterfaceUserDao{ List<Map<String,Object>>findAllUser();}接口中方法定義的規(guī)則:接口中的方法名和sql配置文件中定義的id一致接口方法輸入?yún)?shù)類型要和配置文件中定義的parameterType一致接口返回?cái)?shù)據(jù)類型要和配置文件中定義的resultType一致27擴(kuò)展:使用接口方式完成數(shù)據(jù)操作【可選】第二步:通過namespace關(guān)聯(lián)接口和配置文件<mappernamespace="dao.UserDao">第三步:調(diào)用接口訪問數(shù)據(jù)UserDaodao=sqlSession.getMapper(UserDao.class);List<Map<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論