上一章節(jié)中我們已經(jīng)完成了對單表的CRUD操作,接下來今天這一講講述的是關于Mybatis在多表查詢時候的應用,畢竟實際業(yè)務中也是多表的聯(lián)合查詢比較多嘛~

還記得最一開始我們新建過一張Website表嗎,在那張表里有個VisitorId字段,表示訪問者訪問過哪些網(wǎng)站,現(xiàn)在我們先按照上一張中的要求把關于Website的JavaBean實體先建立出來。

還是在david.mybatis.model包下面新建一個Website類,用來持久化數(shù)據(jù)之用,重寫下相應toString()方法,方便測試程序之用。

Website實體類

在david.mybatis.demo下面分別新建相應的操作接口:


Website操作接口

在mapper文件夾下新建WebsiteMapper.xml映射文件,分別參照上一張所說的把增刪改查的單表操作配置分別放進去,這樣你可以建造一點測試數(shù)據(jù)。如下

WebsiteMapper配置

這里今天主要說的就是那個查,現(xiàn)在我們想要查詢網(wǎng)站的同時分別把相應的訪問者信息一起拿出來,怎么做呢,大家可以參照配置中的query,寫下聯(lián)表查詢的SQL,

這里主要要注意的是,Website實體與Visit的實體里面Id與Name這2個屬性都是一樣的,所以為了避免映射出現(xiàn)出錯現(xiàn)象,把相應的查詢結果列起上不一樣的別名,這樣綁定的時候就可以避免

假如我想下面一樣配置會得到什么呢?

可能引起錯誤的配置

有 木有發(fā)覺,Visitor的Id也變成2了,這個其實它默認映射了Website的ID,因為SQL語句查詢出來的結果2個ID都是變成2了,有人會問為 什么不是4呢,因為他默認匹配第一個如果你把Website.Id與Visit.Id的位置,相互換下就會發(fā)現(xiàn)結果又神奇的變了

所以需要起個別名避免這種情況,這樣你就會發(fā)現(xiàn)真相其實只有一個就是下面的:

大 家可以看到其實多表處理resultMap的方式和單表是一致的,也無非是吧列明與Javabean屬性名成對應上去,可以看到在Website 的<resultMap>節(jié)點里面前臺另外一個resultMap,他就是代表Visit實體所需要映射的實體,可以使用以下方式進行關聯(lián)

<association property="visitor" javaType="Visitor" resultMap="visitorRs" />

其中的visitor就是Website實體中的visit字段名,必須保證名稱一致,否則就會拋出There is no getter for property named 'XXX' in 'class david.mybatis.model.Website'的異常,這在上幾章已經(jīng)講述了,當 然如果你覺得不用嵌套resultMap也行,嵌套也是出于其他地方可以還要用到這個配置那就提煉出來的過程,也是抽象出來的一種思想。具體使 用<resultMap>中的ID與Result可以從官網(wǎng)查找相應區(qū)別說明:http://mybatis.github.io /mybatis-3/sqlmap-xml.html#Result_Maps

這樣,一個簡單的多表聯(lián)合查詢就出來啦~,如果還有更加復雜的查詢業(yè)務費是在這個基礎上些許的變通修改。

這章就到此為止啦,下一章會繼續(xù)跟講下,如果弄一個簡單的Mybatis下的分頁效果~^0^



如果你覺得這篇文章對你有用,歡迎推薦[推薦]

如果你覺得文章內(nèi)有錯誤歡迎指出^0^~

如果您想轉載本博客,請注明出處

如果您對本文有意見或者建議,歡迎留言

本文版權歸作者和博客園共有,歡迎轉載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則作者保留追究法律責任的權利。