【SSM框架】Mybatis详解11(源码自取)之表关联关系

  • ‍♂️个人主页:杯咖啡
  • 进步是今天的活动,明天的保证!
  • ✨目前正在学习:SSM框架,算法刷题
  • 本文收录专栏:SSM框架解析
  • 牛客网,刷算法过面试的神级网站,用牛客你也牛。 免费注册和我一起学习刷题
  • 希望大家多多支持一起进步呀!
  • The man who fears losing has already lost.
    怕输的人已经输了。 - 《权力的游戏》

✨前言

上一节我们学习了入参、返回值map
本节我们将复习表的关联关系,用一个小例子呈现。
和我一起复习下去你可以获得一个比较完美框架demo,并且深刻体会框架
坚持到最后的源码解析你会收获更多哦,加油坚持!!!


文章目录

  • ✨前言
  • 表之间的关联关系
    • 一对多关联关系
    • 多对一关联关系
    • 一对一关联
    • 多对多关联
  • ✨总结


表之间的关联关系

关联关系是有方向的.
1)一对多关联:一个老师可以教多个学生,多个学生只有一个老师来教,站在老师方,就是一对多关联.
2)多对一关联:一个老师可以教多个学生,多个学生只有一个老师来教,站在学生方,就是多对一关联.
3)一对一关联:一个老师辅导一个学生,一个学生只请教一个老师.学生和老师是一对一.
4)多对多关联:园区划线的车位和园区的每一辆车.任意一个车位可以停任意一辆车.任意一车辆车可以停在任意一个车位上.

一对多关联关系

客户和订单就是典型的一对多关联关系.
一个客户名下可以有多个订单.
客户表是一方,订单表是多方.客户一中持有订单的集合.
使用一对多的关联关系,可以满足查询客户的同时查询该客户名下的所有订单.

首先修改实体类,添加无参构造方法,有参构造方法,tostring方法,setter,getter方法(下面代码省略

public class Customer {
    //customer表中的三个列
    private Integer id;
    private String name;
    private Integer age;
    //该客户名下的多有订单,一方持有多方的集合
    private List<Orders> ordersList;
//------------------------------------------------------
public class Orders {
    private Integer id;
    private String orderNumber;
    private Double orderPrice;

    //包含客户对象,多对一,多方持有一方的对象
    private Customer customer;
  

修改CustomerMapper.xml文件,这里在绑定数据的时候使用了resultMap,这里主要关注一下resultmap的绑定过程

<mapper namespace="com.bjpowernode.mapper.CustomerMapper">
   
    <resultMap id="customermap" type="customer">
        
        <id property="id" column="cid">id>
        
        <result property="name" column="name">result>
        <result property="age" column="age">result>

        
        <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>
mapper>

编写测试类

@Test
    public void testGetCustomerById(){
       Customer customer = customerMapper.getById(1);
       System.out.println(customer);
   }

【SSM框架】Mybatis详解11(源码自取)之表关联关系_第1张图片

这里可以看到,我们查询用户,该用户的订单也显示出来了。

多对一关联关系

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

修改OdersMapper.xml文件

<mapper namespace="com.bjpowernode.mapper.OrdersMapper">
    

    
    <resultMap id="ordersmap" type="orders">
        
        <id property="id" column="oid">id>
        
        <result property="orderNumber" column="orderNumber">result>
        <result property="orderPrice" column="orderPrice">result>
        
        <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>
  mapper>

添加测试方法

@Test
    public void testGetOrdersById(){
        Orders orders = ordersMapper.getById(11);
        System.out.println(orders);

    }

【SSM框架】Mybatis详解11(源码自取)之表关联关系_第2张图片

这里我们看到,查询订单的时候,用户的信息也随着查出来了。

一对一关联

下面的一对一以及多对多就不再写例子了,直接上总结。

多对多关联

园区划线的车位和园区的每一辆车.任意一个车位可以停任意一辆车.任意一车辆车可以停在任意一个车位上.
具体例子不在详细写了。看总结。


✨总结

无论是什么关联关系,如果某方持有另一方的集合,则使用标签完成映射,如果某方持有另一方的对象,则使用标签完成映射。
表关联在用途中,一对多,多对一比较常用,其余的比较少用。
下一节将会复习到事务,缓存,ORM

本次源码放在代码仓库gitee,自取链接

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

你可能感兴趣的:(SSM框架解析,mybatis,面试,java,sql,开发语言)