MyBatis扩展之关联关系

七八个星天外,两三点雨山前


前言

桂林山水甲天下
还有螺蛳粉!
有机会一定要去一次


一、表之间的关联关系

关联关系是有方向的

  1. 一对多关联:一个老师可以教多个学生,多个学生只有一个老师来教,站在老师方,就是一对多关联,
  2. 多对一关联:一个老师可以教多个学生,多个学生只有一个老师来教,站在学生方,就是多对一关联
  3. 一对一关联:vip服务
  4. 多对多关联:公共车位和很多辆车

二、一对多

客户和订单就是典型的一对多关联关系。
一个客户名下可以有多个订单
客户表是一方,订单表是多方

使用一对多的关联关系,可以满足查询客户的同时查询该客户名下的所有订单

 <!--
        //根据客户的id查询客户所有信息并同时查询该客户名下的所有订单
        Customer getById(Integer id);
            Customer实体类
            //customer表中的三个列
            private Integer id;
            private String name;
            private Integer age;

            //该客户名下的所有订单的集合
            private List<Orders> ordersList;
    -->
    <resultMap id="customerMap" type="customer">
        <!--        主键绑定-->
        <id property="id" column="cid"></id>
        <!--        非主键绑定-->
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
        <!--        多出来的一骨碌绑定orderList
            Orders实体类
            private Integer id;
            private String orderNumber;
            private double orderPrice;
        -->
        <collection property="ordersList" ofType="orders">
            <!--            主键绑定-->
            <id property="id" column="oid"></id>
            <!--            非主键绑定-->
            <result property="orderNumber" column="orderNumber"></result>
            <result property="orderPrice" column="orderPrice"></result>
        </collection>
    </resultMap>

    <select id="getById" parameterType="int" resultMap="customerMap">
        select c.id cid,name,age,o.id oid,orderNumber,orderPrice,customer_id
        from customer c left join orders o on c.id = o.customer_id
        where c.id = #{id}
    </select>

三、多对一

订单和客户就是多对一关联
站在订单的方向查询订单的同时将客户信息查出
订单是多方,会持有一方的对象,客户是一方

<!--
    //根据主键查订单,并同时查询下次订单的客户信息
        Orders getById(Integer id);
    -->
    <!--
        手工绑定数据
        实体类
            private Integer id;
            private String orderNumber;
            private double orderPrice;

    //关联下次订单的客户信息,多方持有一方的对象
    private Customer customer;
    -->
    <resultMap id="ordersMap" type="orders">
        <!--        主键绑定-->
        <id property="id" column="oid"></id>
        <!--        非主键绑定-->
        <result property="orderNumber" column="orderNumber"></result>        <result property="orderNumber" column="orderNumber"></result>
        <result property="orderPrice" column="orderPrice"></result>
        <!--        多出来的一骨碌绑定
            private Integer id;
            private String name;
            private Integer age;

            //该客户名下的所有订单的集合,一方持有多方的集合
            private List<Orders> ordersList; //不用管
        -->
        <association property="customer" javaType="customer">
            <id property="id" column="cid"></id>
            <result property="name" column="name"></result>
            <result property="age" column="age"></result>
        </association>
    </resultMap>
    <select id="getById" parameterType="int" resultMap="ordersMap">
        select o.id oid,orderNumber,orderPrice,customer_id,c.id cid,name,age
        from orders o inner join customer c on o.customer_id = c.id
        where o.id = #{id}
    </select>

总结

看代码即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值