MyBatis(八) resultMap 之 (三)

2/10/2017来源:心得技巧人气:3134

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"/>