mybatis中的多表操作

mybatis中的多表操作

本篇为多表连接操作,下一篇为多表级联操作
表之间的关系有几种:

  • 一对一

  • 一对多

  • 多对一

  • 多对多

    示例:用户和账户

​ 一个用户可以有多个账户

​ 一个账户只能属于一个用户(多个账户也可以属于同一个用户)

​ 步骤:

  1. 建立两张表:用户表,账户表

  1. 建立两个实体类:用户实体类和账户实体类,让用户和账户的实体类能体现出一对一或者一对多的关系
    在这里插入图片描述在这里插入图片描述
    (以上体现出实体类中一对一的关系)

  2. 建立两个配置文件:分别为用户配置文件和账户配置文件
    在这里插入图片描述

  3. 实现配置:

    • 当我们查询用户时,可以同时得到用户下所包含的账户信息
    • 当我们查询账户时,可以同时得到账户所属用户的信息

一对一

按照上述前三步操作之后,我们就来实现配置

  1. dao/mapper下建立两个接口,实现映射方法

在这里插入图片描述

  1. 在对应的配置文件下写查询语句,重点在于resultmap的使用

    eg:当我们想查询账户以及账户所对应的用户时

    这是账户的表结构

    在这里插入图片描述

    可以看出,账户表中存在外键uid,用来连接用户表中的id

    在这里插入图片描述

    这就是我们对应表里的查询语句

  • resultMap标签的介绍
    • 当用户所建的实体类中的属性名和数据库中的字段名不一样时,resultType标签就不能满足我们的需求了,这时候就需要resultMap来建立我们属性与字段名的映射

    • resultMap的id是标识,相当于这个resultMap的名字,当在写sql语句的标签中使用resultMap时,就可以将id填入;type是要映射的哪一个实体类,可以写全路径名,可以写别名。

    • resultMap标签里id标签为主键,result标签是非主键,property属性时实体类中的属性名,column属性为数据库中的列名

    • 当关系为一对一时,我们在resultMap标签中可以使用association标签,其中property,column和上述相同,JavaType是决定将结果映射到哪一个实体类上,在association标签中还可以继续写另一个实体类与表的映射。

多对一/一对多

​ 与以上步骤相同,不同之处在于:

  1. 实体类中表现出一对多的关系:

在这里插入图片描述

可以与上面一对一的关系做对比,看有什么不同

  1. resultMap中的改动以及sql语句的变动

    在一对多或者多对一关系中,resultMap标签中不能再使用association标签,而要使用collection标签

    在这里插入图片描述

    ofType属性是表示在集合中的元素的类型

    根据需求,我们要显示所有的用户以及用户所属账号,所以sql语句要用到左外连接。

多对多

示例:用户与角色

用户可以有多个角色

角色也可以赋予多个用户

  1. 建立三张表:用户表,角色表,以及中间表(桥表)

    在这里插入图片描述

    让用户和角色之间要具有多对多的关系,必须要使用到中间表,中间表包含用户表与角色表的主键,作为中间表的外键,以及自身的主键。

  2. 建立两个实体类:用户实体类和角色实体类,各自包含一个对对方的集合引用

在这里插入图片描述
在这里插入图片描述
3. 建立两个配置文件:分别为用户配置文件和角色配置文件

在这里插入图片描述

  1. 实现配置:

    • 当我们查询用户时,可以同时得到用户下所包含的角色信息
    • 当我们查询角色时,可以同时得到具有该角色的用户的信息

同样,在一对多的基础上,差别就在sql语句,多个一对多不就是多对多么
在这里插入图片描述
下一篇
mybatis中的延迟加载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值