MyBatis框架(13):多對多查詢

本文實現(xiàn)多對多查詢看蚜,查詢用戶及用戶購買商品信息。

示例

查詢主表是:用戶表
關(guān)聯(lián)表:由于用戶和商品沒有直接關(guān)聯(lián),通過訂單和訂單明細(xì)進(jìn)行關(guān)聯(lián)涣达,所以關(guān)聯(lián)表:orders、orderdetail、items

  • sql
SELECT 
  orders.*,
  user.username,
  user.sex,
  user.address,
  orderdetail.id orderdetail_id,
  orderdetail.items_id,
  orderdetail.items_num,
  orderdetail.orders_id,
  items.name items_name,
  items.detail items_detail,
  items.price items_price
FROM
  orders,
  user,
  orderdetail,
  items
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
  • 映射思路
    將用戶信息映射到user中度苔。

在user類中添加訂單列表屬性List<Orders> orderslist匆篓,將用戶創(chuàng)建的訂單映射到orderslist

在Orders中添加訂單明細(xì)列表屬性List<OrderDetail>orderdetials,將訂單的明細(xì)映射到orderdetials

在OrderDetail中添加Items屬性寇窑,將訂單明細(xì)所對應(yīng)的商品映射到Items

  • mapper.xml
<!-- 查詢用戶及購買的商品信息鸦概,使用resultmap -->
<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
   SELECT
      orders.*,
      user.username,
      user.sex,
      user.address,
      orderdetail.id orderdetail_id,
      orderdetail.items_id,
      orderdetail.items_num,
      orderdetail.orders_id,
      items.name items_name,
      items.detail items_detail,
      items.price items_price
    FROM
      orders,
      user,
      orderdetail,
      items
    WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
</select>
  • resultMap
<!-- 查詢用戶及購買的商品 -->
<resultMap type="com.iot.mybatis.po.User" id="UserAndItemsResultMap">
    <!-- 用戶信息 -->
    <id column="user_id" property="id"/>
    <result column="username" property="username"/>
    <result column="sex" property="sex"/>
    <result column="address" property="address"/>

    <!-- 訂單信息
    一個用戶對應(yīng)多個訂單,使用collection映射
     -->
    <collection property="ordersList" ofType="com.iot.mybatis.po.Orders">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>

        <!-- 訂單明細(xì)
         一個訂單包括 多個明細(xì)
         -->
        <collection property="orderdetails" ofType="com.iot.mybatis.po.Orderdetail">
            <id column="orderdetail_id" property="id"/>
            <result column="items_id" property="itemsId"/>
            <result column="items_num" property="itemsNum"/>
            <result column="orders_id" property="ordersId"/>

            <!-- 商品信息
             一個訂單明細(xì)對應(yīng)一個商品
             -->
            <association property="items" javaType="com.iot.mybatis.po.Items">
                <id column="items_id" property="id"/>
                <result column="items_name" property="name"/>
                <result column="items_detail" property="detail"/>
                <result column="items_price" property="price"/>
            </association>

        </collection>

    </collection>
</resultMap>

多對多查詢總結(jié)

將查詢用戶購買的商品信息明細(xì)清單甩骏,(用戶名窗市、用戶地址、購買商品名稱饮笛、購買商品時間咨察、購買商品數(shù)量)

針對上邊的需求就使用resultType將查詢到的記錄映射到一個擴(kuò)展的pojo中,很簡單實現(xiàn)明細(xì)清單的功能福青。

一對多是多對多的特例摄狱,如下需求:
查詢用戶購買的商品信息,用戶和商品的關(guān)系是多對多關(guān)系素跺。

需求1:

查詢字段:用戶賬號二蓝、用戶名稱、用戶性別指厌、商品名稱刊愚、商品價格(最常見)

企業(yè)開發(fā)中常見明細(xì)列表,用戶購買商品明細(xì)列表踩验,
使用resultType將上邊查詢列映射到pojo輸出鸥诽。

需求2:

查詢字段:用戶賬號、用戶名稱箕憾、購買商品數(shù)量牡借、商品明細(xì)(鼠標(biāo)移上顯示明細(xì))

使用resultMap將用戶購買的商品明細(xì)列表映射到user對象中。

總結(jié):

使用resultMap是針對那些對查詢結(jié)果映射有特殊要求的功能袭异,比如特殊要求映射成list中包括多個list钠龙。

resultMap總結(jié)

resultType

作用:將查詢結(jié)果按照sql列名pojo屬性名一致性映射到pojo中。
場合:常見一些明細(xì)記錄的展示御铃,比如用戶購買商品明細(xì)碴里,將關(guān)聯(lián)查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中上真,在前端頁面遍歷list(list中是pojo)即可咬腋。

resultMap

使用association和collection完成一對一和一對多高級映射(對結(jié)果有特殊的映射要求)。
使用association和collection完成一對一和一對多高級映射(對結(jié)果有特殊的映射要求)睡互。

association:

  • 作用:將關(guān)聯(lián)查詢信息映射到一個pojo對象中根竿。
  • 場合:為了方便查詢關(guān)聯(lián)信息可以使用association將關(guān)聯(lián)訂單信息映射為用戶對象的pojo屬性中陵像,比如:查詢訂單及關(guān)聯(lián)用戶信息。
    使用resultType無法將查詢結(jié)果映射到pojo對象的pojo屬性中寇壳,根據(jù)對結(jié)果集查詢遍歷的需要選擇使用resultType還是resultMap醒颖。

collection:

  • 作用:將關(guān)聯(lián)查詢信息映射到一個list集合中。
  • 場合:為了方便查詢遍歷關(guān)聯(lián)信息可以使用collection將關(guān)聯(lián)信息映射到list集合中九巡,比如:查詢用戶權(quán)限范圍模塊及模塊下的菜單图贸,可使用collection將模塊映射到模塊list中蹂季,將菜單列表映射到模塊對象的菜單list屬性中冕广,這樣的作的目的也是方便對查詢結(jié)果集進(jìn)行遍歷查詢。如果使用resultType無法將查詢結(jié)果映射到list集合中偿洁。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撒汉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涕滋,更是在濱河造成了極大的恐慌睬辐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾肺,死亡現(xiàn)場離奇詭異溯饵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锨用,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門丰刊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人增拥,你說我怎么就攤上這事啄巧。” “怎么了掌栅?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵秩仆,是天一觀的道長。 經(jīng)常有香客問我猾封,道長澄耍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任晌缘,我火速辦了婚禮齐莲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枚钓。我一直安慰自己铅搓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布搀捷。 她就那樣靜靜地躺著星掰,像睡著了一般多望。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氢烘,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天怀偷,我揣著相機(jī)與錄音,去河邊找鬼播玖。 笑死椎工,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜀踏。 我是一名探鬼主播维蒙,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼果覆!你這毒婦竟也來了颅痊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤局待,失蹤者是張志新(化名)和其女友劉穎斑响,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钳榨,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡舰罚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了薛耻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片营罢。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昭卓,靈堂內(nèi)的尸體忽然破棺而出愤钾,到底是詐尸還是另有隱情,我是刑警寧澤候醒,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布能颁,位于F島的核電站,受9級特大地震影響倒淫,放射性物質(zhì)發(fā)生泄漏伙菊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一敌土、第九天 我趴在偏房一處隱蔽的房頂上張望镜硕。 院中可真熱鬧,春花似錦返干、人聲如沸兴枯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财剖。三九已至悠夯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躺坟,已是汗流浹背沦补。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留咪橙,地道東北人夕膀。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像美侦,于是被迫代替她去往敵國和親产舞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容