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

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

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

Website實體類

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


Website操作接口

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

WebsiteMapper配置

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

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

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

可能引起錯誤的配置

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

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

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

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

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

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

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



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

如果你覺得文章內有錯誤歡迎指出^0^~

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

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

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