<!-- 查詢用戶商品信息 ,多對多--> <resultMap type="cn.itcast.po.user" id="usermappingitem"> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="usercode" property="usercode"/> <result column="sex" property="sex"/> <!-- 配置orders --> <collection property="orders" ofType="cn.itcast.po.Order"> <id column="id" property="id"/> <result column="number" property="number"/> <result column="price" property="price"/> <!-- 配置orderdetail --> <collection property="orderdetail" ofType="cn.itcast.po.Orderdetail"> <id property="id" column="orderdetail_id"/> <result property="order_id" column="orderId"/> <result property="item_num" column="itemNum"/> <association property="item" javaType="cn.itcast.po.Item"> <id column="item_id" property="id"/> <result column="name" property="name"/> <result column="price" property="price"/> </association> </collection> </collection> </resultMap> <!-- 查詢用戶商品信息 ,sql--> <select id="findItemsOfUser" resultMap="usermappingitem"> SELECT orders.*, USER .username, USER .usercode, USER .sex, orderdetail.id orderdetail_id, orderdetail.item_id, orderdetail.item_num, item.name, item.price FROM orders, USER, orderdetail, item WHERE orders.user_id = USER .id AND orders.id = orderdetail.order_id AND orderdetail.item_id = item.id </select>
如上面所示是今天練習resultmap所用到的配置以及SQL語句,原先錯誤理解了老師的講解,因為是查詢用戶訂單中的商品信息,是一個多對多的關系,所以user表是主表,item表是從表。在定義user類的bean時,出了user的基本信息外還包含訂單集合即orders集合屬性,同樣的order類中還包含orderdetail集合屬性,orderdetail類中則包含item對象屬性,它們關系如下:
user表————(一對多)orders表————(一對多)orderdetail表————(一對一)item表
而我原先以為要想注入各個對象的屬性值需要在它的父級表中有所定義(user表是最高父級除外),例如,如果我想要讓查詢到的order結果包含order對象中的id,number,price等屬性時那么我需要在user類中定義這些屬性才能將數據注入這些屬性。其實不然,待實驗之后發現,這些屬性其實是和查詢條件相關,即如果你的查詢條件中包含你所需要注入的屬性時查詢數據才能注入到屬性中,否則數據無法注入為null而和是否在父級類中有無定義沒有關系,當然,你的查詢字段名稱要和你po類中的屬性名稱相對應,例如,如果某個查詢字段有別名那么你需要申明resultmap中column和property值對應(上邊藍色背景),column=表中字段名稱,property=po類(上邊綠色背景)中屬性名稱。