框架學習系列 mybatis 第二十篇 電商項目中多對多映射

框架學習系列 mybatis 第二十篇 電商項目中多對多映射

凱哥Java 凱哥java
本節主要內容
1:多對多映射
2:總結&下節預告
3:凱哥說一說
本文是《凱哥陪你學系列-框架學習之mybatis框架學習》中第二十篇 多對多映射
聲明:本文系凱哥Java(www.kaigejava.com)原創,未經容許,禁止轉載!
一:多對多
1.1:什麼是多對多?
多對多映射其實就是一對多映射的一種特列。
1.2:需求
在電商項目中,查詢用戶信息的時候,關聯查詢出該用戶購買的商品信息
回顧我們將的四個表:訂單表(orders)、訂單明細表(orderdetail)、商品表(items)、用戶表(user)
表與表之間的關係:
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
分析需求:
主表是什麼?從表又是什麼?
主表:查詢用戶信息,因此主表是用戶表(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`

框架學習系列 mybatis 第二十篇 電商項目中多對多映射
1.2:修改PO類
a:根據分析,咱們知道主表是在user表。
因此,咱們修改user表pojo擴展類。用戶與訂單是一對多關係,因此,添加list<Orders>
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
b:訂單(orders)表與訂單詳情表(orderdetail)是一對多關係,因此在Orders表的實體對象中擴展
出List<Orderdetail> detailList
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
c:訂單詳情表(orderdetail)與商品表是一對一的關係。因此同理,在ordedetail的po對象中擴展出存放items對象的字段:
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
1.3:order-mapper.xml文件中
a:回憶一對一映射使用什麼標籤進行聲明?
b:回憶一對多映射使用什麼標籤進行聲明?
聲明返回resultMap:
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
代碼: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>

查詢主語句:
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
1.4:測試類型
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
運行結果:
框架學習系列 mybatis 第二十篇 電商項目中多對多映射
二:總結
經過本文學習,咱們須要掌握:
1:學會根據需求,分析出對應表及表之間關係進而先寫出sql語句。
2:知道什麼是多對多關係。
3:學會一對多,一對一嵌套使用。來實現咱們不一樣的需求
凱哥說一說:
凱哥但願各位看官老爺們,多提提意見。有時候,或許您們看不到個人回覆,可是我會認真看每一個人的意見的。會在相應文章中給出解答的。
下節預告:
延遲加載又叫懶加載,也叫按需加載。也就是說先加載主信息,在須要的時候,再去加載從信息。
下節咱們學習:延遲加載mybatis

相關文章
相關標籤/搜索