MyBatis入門【十】一對多查詢

前言

  • 本文主要講解入門項目的基本知識
  • 本文乃是我學習筆記總結,不足之處,還望指點
  • 本文中因多處使用註釋,爲方便書寫,若以“//”雙斜槓開頭的都是註釋
  • 本文中爲了清晰講解基礎知識,其中的代碼並未完整

項目需求

需求

查詢訂單及訂單明細的信息(大家自行腦補什麼訂單吧)

SQL語句

確定查詢的主表:訂單表
確定查詢的關聯表:訂單明細表
(相信大家也清楚簡單電商平臺數據庫的吧)

分析思路

分析

在orders.java類中添加List<orderDetail> orderDetails屬性。

最終會將訂單信息映射到orders中,訂單所對應的訂單明細映射到orders中的orderDetails屬性

在orders中添加list訂單明細

//訂單明細
private List<OrderDetail> orderdetails;

mapper.xml

resultMap的定義

<!-- 訂單及訂單明細的resultMap -->
<!-- 使用繼承,就可以不用再配置訂單信息和用戶信息的映射 -->
<resultMap type="Orders全路徑" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
    <!-- 訂單信息 -->
    <!-- 用戶信息 -->

    <!-- 訂單明細信息 -->
    <!-- 一個訂單關聯查詢出多個明細,要使用collection進行映射 -->
    <!-- collection:對關聯查詢到多條記錄映射到集合對象中
        property:將關聯查詢到多條記錄映射到Orders中的哪個屬性,也就是新添加的list
        ofType:指定映射到list集合屬性中的pojo的類型
     -->
    <collection property="orderdetails"  ofType="OrderDetail全路徑">
        <!-- id:訂單明細唯一標識 -->
        <!-- property:要將訂單明細的唯一標識映射到OrderDetail的哪個屬性 -->
        <id column="" property=""/>
        <!-- 其他普通列 -->
        <result column="" property="" />
    </collection>
</resultMap>

關於繼承的內容見MyBatis入門【九】一對一查詢之resultMap

配置SQL

<!-- 查詢訂單關聯查詢用戶信息 -->
<select id="findOrdersAndOrderDetailResultMap" parameterType="" resultMap="OrdersAndOrderDetailResultMap全路徑">
    <!-- parameterType="",用於傳入查詢條件參數,在此處先進行省略 -->
    select 
        orders.* , 
        user.username, 
        user.sex, 
        user.address, 
        orderdetail.id, 
        orderdetail.num  
    from  
        orders , user,orderdetail  
    where  
        orders.id = user.id and orderdetail.id=order.id
</select>

mapper.java

public List<Orders> findOrdersAndOrderDetailResultMap(0 throws Exception;

測試

測試和一對多測試原理相同,這裏投個懶,留給大家去解決了

大家可以見MyBatis入門【九】一對一查詢之resultMap

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章