首页 > 代码库 > mybatis一对多关联查询——(九)

mybatis一对多关联查询——(九)

 

1.需求:

查询所有订单信息及订单下的订单明细信息。

订单信息与订单明细为一对多关系。

2.      sql语句

确定主查询表:订单表

确定关联查询表:订单明细表

在一对一查询基础上添加订单明细表关联即可。

 

SELECT   orders.*,  USER.username,  USER.sex,  USER.address,  orderdetail.id orderdetail_id,  orderdetail.items_id,  orderdetail.items_num,  orderdetail.orders_idFROM  orders,  USER,  orderdetailWHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id

 

3.   分析(只能使用resultMap)

使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复。

技术分享

 

要求:

对orders映射不能出现重复记录。

 

在orders.java类中添加List<orderDetail> orderDetails属性。

最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。

技术分享

 

映射成的orders记录数为两条(orders信息不重复)

每个orders中的orderDetails属性存储了该订单所对应的订单明细。

 

4.     在orders中添加list订单明细属性

技术分享

 

 

5.    mapper.xml

5.1   语句

技术分享

 

    5.2  resultMap定义

<!-- 订单及订单明细的resultMap    使用extends继承,不用在中配置订单信息和用户信息的映射     -->    <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">        <!-- 订单信息 -->        <!-- 用户信息 -->        <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->                        <!-- 订单明细信息        一个订单关联查询出了多条明细,要使用collection进行映射        collection:对关联查询到多条记录映射到集合对象中        property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性        ofType:指定映射到list集合属性中pojo的类型         -->         <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">             <!-- id:订单明细唯 一标识             property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性               -->             <id column="orderdetail_id" property="id"/>             <result column="items_id" property="itemsId"/>             <result column="items_num" property="itemsNum"/>             <result column="orders_id" property="ordersId"/>         </collection>                </resultMap>

 

 

6.    mapper.java

 

public List<Orders>findOrdersDetailList () throws Exception;

 

 

7     总结

在一个里面添加多个list集合。

mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

 

使用resultType实现:

将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

 

mybatis一对多关联查询——(九)