高级查询(多对多)

多对多查询

多对多查询是基于一对一和一对多来实现的
多对多查询:通过订单号查询订单,查询出下单人信息并且查询出订单详情以及商品数据。
用户表:tb_ser 订单表:tb_order 订单详情表:tb_orderdetail 商品表:tb_item

思路:

  • 订单:用户 = 1:1 (体现在pojo对象中就是在Order对象中添User对象)
  • 订单:订单详情 = 1 : n(体现在pojo对象中就是在Order对象中添加OrderDetail对象的集合)
  • 订单详情:商品 = 1 : 1(体现在pojo对象中就是在OrderDetail对象中添加Item对象)

编写statement

<resultMap type="Order" id="orderUserDetailItemMap" autoMapping="true">
    <id property="id" column="id"/>
    <!-- 对一查询User -->
    <association property="user" javaType="User" autoMapping="true">
        <!-- 
            property="id":关联对象的主键的属性名称
            column:关联对象在当前表中的外键的字段名称,如果重复,可以使用别名或者外键名称
         -->
        <id property="id" column="uid"/>
    </association>
    <!-- 对多查询Orderdetail -->
    <collection property="detailList" javaType="List" ofType="Orderdetail">
        <!-- 
            property="id":关联对象的主键的属性名称
            column:关联对象在表中的主键名称,如果重复,可以使用别名
         -->
        <id property="id" column="detail_id"/>
            <!-- 通过Orderdetail对一查询Item -->
            <association property="item" javaType="Item" autoMapping="true">
                <!-- 
                    property:item的主键的属性名称
                    column:表中主键的字段名称,如果重名,可以使用别名,或者外键名称
                 -->
                <id property="id" column="iid"/>
            </association>
    </collection>
</resultMap>

<select id="queryOrderAndUserAndOrderdetailAndItemByOrderNumber" resultMap="orderUserDetailItemMap">
    select *,od.id as detail_id,u.id as uid,i.id as iid from tb_order o 
        inner join tb_user u on o.user_id = u.id
        inner join tb_orderdetail od on o.id = od.order_id
        inner join tb_item i on od.item_id = i.id
    where o.order_number = #{number}
</select>

collection标签和association标签可以互相嵌套使用
autoMapping=”true”添加自动映射,一旦涉及到嵌套查询,需要手动设置为true(通常采用这种方式)。但也可mybatis-config.xml中的setting配置中配置如下属性:

    <setting name="autoMappingBehavior" value="FULL"/>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值