10.mybatis_mapping_1tomore(传智播客)

需求:查询所有订单信息关联查询下单用户及订单明细信息。

注意:订单信息与订单明细为一对多关系,订单信息关联查询用户信息为一对一关系。

1.mapper接口

public interface OrderUserOrderDetailMapper {
    List<Orders> getOrderUserOrderDetail();
}

2.sql映射文件

<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="mapper.OrderUserOrderDetailMapper">
        <select id="getOrderUserOrderDetail" resultMap="orderUserOrderDetailMap">
            select orders.*,user.username,user.address,orderDetail.orderDetail_id,orderDetail.item_id,orderDetail.item_num
            from orders inner join user on orders.user_id = user.id
            inner join orderDetail on orders.order_id = orderDetail.order_id
        </select>

        <resultMap  id="orderUserMap" type="Orders">
            <id column="order_id" property="order_id"/>
            <result column="order_no" property="order_no"/>
            <result column="note" property="note"/>
            <association javaType="User" property="user">
                <id column="user_id" property="id"/>
                <result column="username" property="username"/>
                <result column="address" property="address"/>
            </association>
        </resultMap>

        <resultMap id="orderUserOrderDetailMap" extends="orderUserMap" type="Orders">
            <collection ofType="OrderDetail" property="orderDetailList">
                <id column="orderDetail_id" property="orderDetail_id"/>
                <result column="orderDetail_id" property="orderDetail_id"/>
                <result column="order_id" property="order_id"/>
                <result column="item_id" property="item_id"/>
                <result column="item_num" property="item_num"/>
            </collection>
        </resultMap>
</mapper>

3.编写po类

public class Orders {
    private int order_id;
    private int user_id;
    private String order_no;
    private String createTime;
    private String note;
    private User user;
    private List<OrderDetail> orderDetailList;
    //get和set方法......
}

public class User {
    //属性名要和数据库表的字段对应
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private String birthday;// 生日
    private String address;// 地址
    //get和set方法......
}

public class OrderDetail {
    private int orderDetail_id;
    private int order_id;
    private int item_id;
    private int item_num;
    //get和set方法......
}

在Orders类中加入user属性。
在Orders类中加入orderdetails属性

4.测试

......
OrderUserOrderDetailMapper orderUserOrderDetailMapper = sqlSession.getMapper(OrderUserOrderDetailMapper.class);
List<Orders> ordersList = orderUserOrderDetailMapper.getOrderUserOrderDetail();
Iterator<Orders> iterator = ordersList.iterator();
while(iterator.hasNext()){
    Orders order = iterator.next();
    System.out.println("username:"+order.getUser().getUsername());
    System.out.println("address:"+order.getUser().getAddress());
    System.out.println("order_no:"+ order.getOrder_no());

    List<OrderDetail> orderDetailList = order.getOrderDetailList();
    System.out.println("orderDetailList......"+orderDetailList.size());
    Iterator<OrderDetail> iterator1 = orderDetailList.iterator();
    while(iterator1.hasNext()){
        OrderDetail orderDetail =  iterator1.next();
        System.out.print("order_id:"+orderDetail.getOrder_id());
        System.out.print(",item_id:"+orderDetail.getItem_id());
        System.out.println(",item_num:"+orderDetail.getItem_num());
    }
    System.out.println();
}

猜你喜欢

转载自blog.csdn.net/u010286027/article/details/84196336