resultMap 用于映射 對象關系的 時使用。 對照對象的屬性可以很方便的寫出 mapper.xml 映射文件。
下面用一個例子來再次說明resultMap 的映射過程。 場景如下: 需要查詢 多個用戶,當點擊查看是可以查看他的所有的訂單,點擊訂單時可以查看里面的商品
如果要完成這個需求,對應的實體對象如下:
User |--int id |--String name |--String address |--List<Order> orderList //該用戶的所有訂單//User 對象中嵌套了 List<Order> 集合對象 (一個用戶多個訂單)Order |--int id |--int userId |--date createTime |--List<OrderItem> orderItemList//該訂單的詳情記錄//訂單對象中又嵌套了多個 OrderItem訂單詳情對象(一個訂單對應多個商品記錄)OrderItem |--int id |--orderId //訂單id |--int goodsId //商品id |--int number //購買數量 |--String note //備注 |--goods goods //商品對象//OrderItem訂單詳情中,有嵌套了單個商品的對象。(一條商品記錄對應一個商品)goods |--id |--name |--PRice下面對應上面的文件 編寫 Mapper.xml 的 ResultMap映射代碼:
<!-- 獲取用戶訂單和商品詳情 --> <!-- type為返回類型 這里返回 User --> <resultMap type="User" id="findUserAndOrderDetail"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="address" property="address"/> <!-- User 對象的 List<Order> orderList --> <collection property="orderList " ofType="Order"> <id column="userId" property="id"/><!-- 外鍵映射 --> <result column="createTime" property="createTime"/> <!-- Order訂單中的 List<OrderItem> orderItemList 屬性 --> <collection property="orderItemList" ofType="OrderItem"> <id column="orderId" property="id"/><!-- 外鍵映射 --> <result column="number" property="number"/> <result column="note" property="note"/> <!-- goods對象映射 --> <association property="goods" javaType="goods"> <id column="goodsId" property="id"/><!-- 外鍵映射 --> <result column="goodsName" property="name"/> <result column="price" property="price"/> </association> </collection> </collection> </resultMap><select id="findByName" resultMap="findUserAndOrderDetail"> select user.*, order.createTime, orderItem.number,orderItem.note goods.name goodsName,goods.price from user,order,orderItem,goods where user.id=order.userId and order.id = orderItem.orderId and goods.id = orderItem.goodsId </select>這樣就輕松完成映射了: 幾點注意事項:
映射 List 時 使用<collection oftype="包.對象"/>
映射 對象時 使用 <association javaType="包.對象">
外鍵關聯 使用<id column="goodsId" property="id"/>
新聞熱點
疑難解答