现在多出一张表orderdetail
从三张表user,orders,orderdetail中查询记录
SELECT
orders.*,
`user`.username,
`user`.sex,
`user`.address,
orderdetail.id orderdetail_id,
orderdetail.items_num,
orderdetail.orders_id
FROM
orders,
`user`,
orderdetail
WHERE orders.user_id = `user`.id AND orderdetail.orders_id = orders.id
由于orders和orderdetail是一对多的关系,所以在结果中orders是有重复的.
现在我们要使得重复的oders合为一条,而orderdetail的信息整合为一个list列表.
在orders.java中新增一个属性
List orderdetails;
对多条orderdetail进行映射
<!-- 查询订单关联查询用户及订单明细
继承OrderUserResultMap
-->
<resultMap type="mybatis.com.entity.Orders" id="findOrdersAndOrderdetailResultMap" extends="OrderUserResultMap">
<!-- 订单明细信息
一个订单关联多条明细,要使用collection进行映射
collection:对关联查询到多条记录映射到mybatis.com.entity.Orders哪个属性
ofType指定映射list集合属性中的类型
-->
<collection property="orderdetails" ofType="mybatis.com.entity.Orderdetail">
<id column="orderdetail_id" property="id"/>
<result column="items_num" property="items_num"/>
<result column="items_id" property="items_id"/>
<result column="orders_id" property="orders_id"/>
</collection>
</resultMap>
<!-- 一对多 -->
<select id="findOrdersAndOrderdetailResult" resultMap="findOrdersAndOrderdetailResultMap">
SELECT
orders.*,
`user`.username,
`user`.sex,
`user`.address,
orderdetail.id orderdetail_id,
orderdetail.items_num,
orderdetail.orders_id
FROM
orders,
`user`,
orderdetail
WHERE orders.user_id = `user`.id AND orderdetail.orders_id = orders.id
</select>