凱哥Java 凱哥java
本節主要內容
1:多對多映射
2:總結&下節預告
3:凱哥說一說
本文是《凱哥陪你學系列-框架學習之mybatis框架學習》中第二十篇 多對多映射
聲明:本文系凱哥Java(www.kaigejava.com)原創,未經容許,禁止轉載!
一:多對多
1.1:什麼是多對多?
多對多映射其實就是一對多映射的一種特列。
1.2:需求
在電商項目中,查詢用戶信息的時候,關聯查詢出該用戶購買的商品信息
回顧我們將的四個表:訂單表(orders)、訂單明細表(orderdetail)、商品表(items)、用戶表(user)
表與表之間的關係:
分析需求:
主表是什麼?從表又是什麼?
主表:查詢用戶信息,因此主表是用戶表(user)
從表:購買商品信息。商品是在不一樣訂單中,而每一個訂單也不一樣
因此,從表就是 商品表(items)、訂單表(orders)、訂單詳情表(orderdetail)
分析清楚主表、從表後,在根據上圖中,表與表之間關係,咱們能夠獲得以下sql:java
SELECT orders.`id`, orders.`user_id`, orders.`number`, user.`username`, user.`sex`, orderdetail.`id` detailId, orderdetail.`items_id`, orderdetail.`items_num`, items.`name`, items.`price` FROM orders, USER, orderdetail, items WHERE orders.`user_id` = user.`id` AND orders.`id` = orderdetail.`orders_id` AND orderdetail.`items_id` = items.`id`
1.2:修改PO類
a:根據分析,咱們知道主表是在user表。
因此,咱們修改user表pojo擴展類。用戶與訂單是一對多關係,因此,添加list<Orders>
b:訂單(orders)表與訂單詳情表(orderdetail)是一對多關係,因此在Orders表的實體對象中擴展
出List<Orderdetail> detailList
c:訂單詳情表(orderdetail)與商品表是一對一的關係。因此同理,在ordedetail的po對象中擴展出存放items對象的字段:
1.3:order-mapper.xml文件中
a:回憶一對一映射使用什麼標籤進行聲明?
b:回憶一對多映射使用什麼標籤進行聲明?
聲明返回resultMap:
代碼:sql
<!-- 多對多映射 示例中: 定義:reusltMap 表關係: 用戶與訂單:一對多關係 訂單與訂單明細:一對多關係 訂單明細與商品信息:一對一關係 --> <resultMap type="com.kaigejava.mybatis2.pojo.User" id="UserAndItemsRstMap"> <!-- 聲明用戶信息的 --> <id column="user_id" property="id"/> <result column="username" property="username"/> <!-- 聲明查詢訂單表中信息(用戶與訂單是一對多關係) 一對多關係使用:collection進行聲明 --> <collection property="orders" ofType="com.kaigejava.mybatis2.pojo.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <!-- 聲明訂單明細信息(訂單與訂單詳情是一對多關係) 一對多關係使用:collection進行聲明 --> <collection property="detailIst" ofType="com.kaigejava.mybatis2.pojo.Orderdetail"> <id column="detailId" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <!-- 商品詳情(訂單詳情與商品是一對一關係的) 一對一關係使用:association 進行聲明 --> <association property="items" javaType="com.kaigejava.mybatis2.pojo.Items"> <id column="items_id" property="id"/> <result column="name" property="name"/> <result column="price" property="price"/> </association> </collection> </collection> </resultMap>
查詢主語句:
1.4:測試類型
運行結果:
二:總結
經過本文學習,咱們須要掌握:
1:學會根據需求,分析出對應表及表之間關係進而先寫出sql語句。
2:知道什麼是多對多關係。
3:學會一對多,一對一嵌套使用。來實現咱們不一樣的需求
凱哥說一說:
凱哥但願各位看官老爺們,多提提意見。有時候,或許您們看不到個人回覆,可是我會認真看每一個人的意見的。會在相應文章中給出解答的。
下節預告:
延遲加載又叫懶加載,也叫按需加載。也就是說先加載主信息,在須要的時候,再去加載從信息。
下節咱們學習:延遲加載mybatis