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"/>
新闻热点
疑难解答