mybatis關聯查詢,一對一,一對多


注:這篇文章的代碼有部分刪減,不能直接使用,不過關鍵代碼都存在 

應用場景:

   想用mybatis做關聯查詢,並且把查詢出的數據自動組裝成對象可以使用關聯查詢。

1、一對一實現  

例如:一部小說,屬於一個分類,查詢小說的時候想同時查詢出所屬分類。

1)實體定義:

public class Book {
    private static final long serialVersionUID = 1L;
    
    /**
     *小說ID
     */
    private Integer bookId;
    /**
     *作者
     */
    private String author;
    /**
     *小說名稱
     */
    private String bookName;
    /**
    /**
     *分類ID
     */
    private Integer catalogId;
    
    private CrawlCatalog catalog;
}
public class Catalog  {
    private static final long serialVersionUID = 1L;
    
    /**
     *分類ID
     */
    private Integer catalogId;
    /**
     *分類名字
     */
    private String name;
}

2) BookMapper實現

    <!--通用表字段列表-->
    <resultMap id="ResultMapWithCata" type="Book">
        <result column="BOOK_ID" property="bookId" jdbcType="INTEGER"/>
        <result column="AUTHOR" property="author" jdbcType="VARCHAR"/>
        <result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR"/>
        <result column="CATALOG_ID" property="catalogId" jdbcType="INTEGER"/>
        <association property="catalog" javaType="Catalog">
            <id column="CATALOG_ID" property="catalogId" />
            <result column="CATALOGNAME" property="name" />
        </association>
    </resultMap>
    <!--通用表字段列表-->
  <!--
    方法名稱: selectListByIds
    調用路徑: BookEntityMapper.selectListByIds
    開發信息: 
    處理信息: 根據ID查詢記錄
    -->
    <select id="selectListByIds" parameterType="java.util.List" resultMap="ResultMapWithCata">
       SELECT   
               <include refid="columnListAlias"/>, c.NAME AS CATALOGNAME
       FROM   BOOK b, CATALOG c
       WHERE b.CATALOG_ID=c.CATALOG_ID AND (
        <foreach collection="list" item="item" index="index" separator=" OR " >  
            BOOK_ID=#{item}
           </foreach>
           )
    </select>

 

2、多對一實現

例如:一個用戶在商城生成了一個訂單,訂單中包含很多商品,想在查詢訂單的同時把訂單的明細查詢出來

1)實體定義

public class Order {
    /** 主鍵訂單Id */
    private Integer id;
    /** 下單用戶id */
    private Integer userid;
    // 訂單明細
    private List<OrderDetail> orderdetails;
}
public class OrderDetail {
    /** 主鍵,訂單明細表Id */
    private Integer id;
    /** 訂單Id */
    private Integer orderId;
    /** 商品id */
    private Integer itemsId;
    /** 商品購買數量 */
    private Integer itemsNum;
    // 明細對應的商品信息
    private Items items;
}

 

2)OrderMapper實現

<!-- 查詢訂單關聯查詢用戶及訂單明細 -->
<select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">
    SELECT 
      t1.*,
      t3.id orderdetail_id,
      t3.item_id,
      t3.item_num,
      t3.order_id
    FROM
      order t1,
      orderdetail t3
    WHERE t3.orders_id=t1.id
</select>
<!-- 查詢訂單(關聯用戶)及訂單明細的resultMap -->
<resultMap type="Orders" id="ordersAndOrderDetailResultMap">
  <id column="id" property="id"/>
  <result column="user_id" property="userId"/>
  <collection property="orderdetails" ofType="OrderDetail">
    <id column="orderdetail_id" property="id"/>
    <result column="item_id" property="itemId"/>
    <result column="item_num" property="itemNum"/>
    <result column="order_id" property="orderId"/>
  </collection>
</resultMap>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM