mybatis使用resultMap實現一對多查詢 (需求:查詢訂單以及訂單明細)
阿新 • • 發佈:2019-02-17
使用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集合物件中