注:這篇文章的代碼有部分刪減,不能直接使用,不過關鍵代碼都存在
應用場景:
想用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>
