標籤: mybatisjava
[TOC]git
本文實現一對多查詢,查詢訂單及訂單明細的信息github
肯定主查詢表:訂單表 肯定關聯查詢表:訂單明細表 在一對一查詢基礎上添加訂單明細表關聯便可。sql
SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, user, orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
注意上面的orderdetail.id (AS) orderdetail_id
,這裏須要取別名,不然因爲orders表也有id字段,在後面映射時會衝突mybatis
使用resultType將上邊的查詢結果映射到pojo中,訂單信息的就是重複。app
對orders映射不能出現重複記錄。學習
在orders.java類中添加List<orderDetail> orderDetails
屬性。 最終會將訂單信息映射到orders中,訂單所對應的訂單明細映射到orders中的orderDetails屬性中。網站
映射成的orders記錄數爲兩條(orders信息不重複),每一個orders中的orderDetails屬性存儲了該訂單所對應的訂單明細。.net
//訂單明細 private List<Orderdetail> orderdetails;
<!-- 查詢訂單關聯查詢用戶及訂單明細,使用resultmap --> <select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap"> SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, user, orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id </select>
<!-- 訂單及訂單明細的resultMap 使用extends繼承,不用在中配置訂單信息和用戶信息的映射 --> <resultMap type="com.iot.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap"> <!-- 訂單信息 --> <!-- 用戶信息 --> <!-- 使用extends繼承,不用在中配置訂單信息和用戶信息的映射 --> <!-- 訂單明細信息 一個訂單關聯查詢出了多條明細,要使用collection進行映射 collection:對關聯查詢到多條記錄映射到集合對象中 property:將關聯查詢到多條記錄映射到com.iot.mybatis.po.Orders哪一個屬性 ofType:指定映射到list集合屬性中pojo的類型 --> <collection property="orderdetails" ofType="com.iot.mybatis.po.Orderdetail"> <!-- id:訂單明細惟 一標識 property:要將訂單明細的惟 一標識 映射到com.iot.mybatis.po.Orderdetail的哪一個屬性 --> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> </collection> </resultMap>
//查詢訂單(關聯用戶)及訂單明細 public List<Orders> findOrdersAndOrderDetailResultMap()throws Exception;
mybatis使用resultMap的collection對關聯查詢的多條記錄映射到一個list集合屬性中。code
使用resultType實現:將訂單明細映射到orders中的orderdetails中,須要本身處理,使用雙重循環遍歷,去掉重複記錄,將訂單明細放在orderdetails中。
另外,下面這篇文章對一對多的resultMap機制解釋的很清楚: