1. 程式人生 > >mybatis使用resultMap實現一對多查詢 (需求:查詢訂單以及訂單明細)

mybatis使用resultMap實現一對多查詢 (需求:查詢訂單以及訂單明細)

使用resultMap將查詢出的訂單明細資訊對映Order,java的屬性中

在Orders.java建立訂單明細屬性(一個集合物件,一訂單對應多個訂單明細)

public class Orders {
	private int id;//訂單號
	private int user_id;//使用者的id
	private String order_number;//訂單號
	
	//使用者的資訊
	private User user;
	
	//訂單明細
	private List<Orderdetail> orderdetails;


目標:將查詢出的訂單及訂單明細對映到Orders類中,將明細資訊(多個)對映到List中

Mapper.xml

定義resultMap

	
	<!-- 	
		一對多對映,根據訂單查詢訂單明細出來
		extends:繼承resultMap,如果是垮namespace,需要加上namespace名
		
	 -->
	<resultMap type="orders" id="ordersUserDetailResultMap" extends="ordersUserResultMap">
		<!--
			 對映訂單的明細 
			collection:對映集合物件
			property:對映到那個po,輸入全類名或者別名
			ofType:對映po的型別
			
		 -->
		<collection property="orderdetails" ofType="com.mo.pojo.Orderdetail">
			<!-- 
				column:欄位名
				property:po類屬性
				
				id:唯一的欄位,一般為主鍵 
				result:普通欄位
			-->
			<id column="orderdetail_id" property="id"/>
			<result column="item_id" property="item_id"/>
			<result column="item_num" property="item_num"/>
			<result column="item_price" property="item_price"/>
		</collection>
	</resultMap>


寫statement

<!-- 一對多對映,根據訂單查詢訂單明細 -->	
	<select id="findOrdersUserDetailList" resultMap="ordersUserDetailResultMap">
		SELECT 
			orders.*,
			USER.username,
			USER.address ,
			orderdetail.id orderdetail_id,
			orderdetail.item_id,
			orderdetail.item_num,
			orderdetail.item_price
		FROM
			orders,
			USER,
			orderdetail
		WHERE
			orders.user_id = USER.id 
			AND 
			orders.id = orderdetail.orders_id
	</select>


寫Mapper.java

public interface OrdersMapperCustom {
	List<Orders> findOrdersUserDetailList();
}
結果



使用resultMap就可以自定義 ,將查詢結果對映到list集合物件中

使用resultType是無法將查詢結果對映到一個list集合物件中