欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ibatisresultMapgroupBy屬性怎么用

這篇文章將為大家詳細講解有關ibatis resultMap groupBy屬性怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了齊河免費建站歡迎大家使用!

最近開始轉用j2ee做開發(fā),使用的數(shù)據(jù)持久層是iBatis。

在iBatis中要解決1:N、M:N問題必須要使用到ibatis resultMap,但使用過程中會遇到一個問題,就是groupBy的不能繼承問題。現(xiàn)在舉個例子向大家介紹一下這個問題和解決方法。

ibatis resultMap groupBy問題描述:

考慮一下這種情況,假如一家公司為了員工福利決定搞業(yè)余運動俱樂部,員工可以自由報名。運動的種類根據(jù)部門決定,這樣就有了四個實體,公司,部門,員工和運動。而它們的關系是,公司:部門,部門:員工都是1:N關系,而部門對運動是N:M關系。

如果我們要用一條sql語句做一個如下圖的報名頁面,應該怎么實現(xiàn)呢?

ibatis resultMap groupBy屬性怎么用

首先我們必須定義resultMap,代碼如下:


 




  


  


Select
*
  FROM
tbDepartment, tbStaff, tbResult, tbDepSport
Where
tbStaff.deptid = tbDepartment.deptID
AND
tbSport.sportid = tbDepSport.sportid
AND
tbDepartment.deptID = tbDepSport.deptID

問題分析:

為什么會有這種問題,問題的關鍵在于屬性groupBy。

首先我們先分析一下執(zhí)行以上sql語句所出來的結果集:

開發(fā)支持部 員工甲 足球
開發(fā)支持部 員工甲 籃球
開發(fā)支持部 員工甲 羽毛球
開發(fā)支持部 員工乙 足球
開發(fā)支持部 員工乙 籃球
開發(fā)支持部 員工乙 羽毛球
開發(fā)支持部 員工丙 足球
開發(fā)支持部 員工丙 籃球
開發(fā)支持部 員工丙 羽毛球
開發(fā)支持部 員工丁 足球 
開發(fā)支持部 員工丁 籃球 
開發(fā)支持部 員工丁 羽毛球
開發(fā)支持部 員工卯 足球
開發(fā)支持部 員工卯 籃球
開發(fā)支持部 員工卯 羽毛球
基礎架構部 員工己 足球
基礎架構部 員工己 籃球
基礎架構部 員工己 羽毛球
基礎架構部 員工庚 足球
基礎架構部 員工庚 籃球
基礎架構部 員工庚 羽毛球
基礎架構部 員工申 足球
基礎架構部 員工申 籃球
基礎架構部 員工申 羽毛球
基礎架構部 員工壬 足球
基礎架構部 員工壬 籃球
基礎架構部 員工壬 羽毛球
基礎架構部 員工葵 足球
基礎架構部 員工葵 籃球
基礎架構部 員工葵 羽毛球

這是一個笛卡爾積的結果,有很多冗余的結果,ibatis resultMap是怎么處理這個結果集的?

首先當程序執(zhí)行id為getEverything的statement時,先找到resultMap:DepartmentResult

由于DepartmentResult有groupBy關鍵字,因此DepartmentResult會根據(jù)groupBy的值過濾掉重復的結果,并映射到departVo里的相關屬性,然后放在一個List對象里面,***成功篩選出兩個部門。

在處理DepartmentResult中字段的同時找到了resultMap:StaffResult,發(fā)現(xiàn)StaffResult有groupBy關鍵字,同理又根據(jù)groupBy的值過濾掉重復的字段,這里由于兩個部門的員工都不一樣,因此過濾重復的結果后就能得到每個部門的員工列表。

***處理resultMap:StaffResult,同樣的道理會過濾掉相同的結果。如果兩個部門的運動是不一致的,那么我們很輕松就能得到兩個運動的結果集。但假如兩個部門的運動是一樣的,由于groupBy的關系,***我們只能得到一個運動結果集,就是上圖的結果。

解決辦法:

其實我覺得這是ibatis的一個bug,如果resultMap的groupBy能向上繼承,那么 StaffResult的groupBy實際上就是deptID和sportID,那么就不會出現(xiàn)這種情況。因此要解決這個問題,我們必須要在 StaffResult中引入deptID,并且修改groupBy屬性。

同時為了ibatis能正常映射,我們還要在SportVo中增加deptID屬性。

關于“ibatis resultMap groupBy屬性怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

名稱欄目:ibatisresultMapgroupBy屬性怎么用
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article18/gidcdp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、軟件開發(fā)搜索引擎優(yōu)化、動態(tài)網(wǎng)站、手機網(wǎng)站建設網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)