延續(xù)mybatis的一對(duì)一問題,還是上面一對(duì)一舉得那個(gè)例子(http://fengcl.blog.51cto.com/9961331/1875657),
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、墨脫網(wǎng)站維護(hù)、網(wǎng)站推廣。
如果一個(gè)用戶有多個(gè)作品怎么辦?這就涉及到了一對(duì)多的問題。同樣的,mybatis一對(duì)多依然可以分為兩種方式來解決。
一、使用內(nèi)嵌的ResultMap實(shí)現(xiàn)一對(duì)多映射
1)實(shí)體
public class User implements Serializable{ private static final long serialVersionUID = 112596782083832677L; private Integer id; //編號(hào) private String email; //郵箱 private String realName; //真實(shí)姓名 private String telephone; //電話號(hào)碼 private ListworksInfos; //作品 //get,set方法 ... } public class WorksInfo implements Serializable{ private Integer id; private Integer userId; private Date uploadDate; //上傳時(shí)間 private Date updateDate; //更新時(shí)間 //get,set方法 ... }
2)dao接口省略...
3)mapper映射文件
4)測試省略
二、嵌套查詢方式實(shí)現(xiàn)一對(duì)多
1)實(shí)體類如上
2)dao層接口省略
3)mapper文件映射
4)測試方法忽略
注意:collention元素里的column屬性,即主表中要傳遞給副表做查詢的條件,例如本例中:
及時(shí)將user表中的id字段傳遞給findWorksInfoByUserId方法做參數(shù)使用的,對(duì)應(yīng)worksInfo表中的userId字段。除此之外,嵌套select語句會(huì)導(dǎo)致N+1的問題。首先,主查詢將會(huì)執(zhí)行(1 次) ,對(duì)于主
查詢返回的每一行,另外一個(gè)查詢將會(huì)被執(zhí)行(主查詢 N 行,則此查詢 N 次) 。對(duì)于
大型數(shù)據(jù)庫而言,這會(huì)導(dǎo)致很差的性能問題。