Mybatis中3种关联关系的实现方法示例

 更新时间:2019年11月02日 10:29:24   作者:一入码坑深似海  
这篇文章主要给大家介绍了关于Mybatis中3种关联关系的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

三种关联关系:一对多,一对一,多对多

两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询)

每一种关联关系都可以通过嵌套查询和连接查询来实现。

嵌套查询相当于进行了两次查询,而连接查询将两张表连接然后再进行查询,这样只进行了一次查询

由于数据表要对实体类进行映射,所以每一种关联关系中都需要在java类中定义属性来进行关联,可以通过如图关联:


一对一查询

数据表实现:通过A表的主键引用B表的主键作为外键,就是说在A中主键和外键同一字段。

查询方式:嵌套查询,连接查询;

关系:丈夫和妻子(Husband Wife)

嵌套查询实现:


在实体类husband中关联wife,进行连接查询之后,需要使用resultMap对查出来的结果进行结果映射;

resultMap中type属性指定映射的类型;id标签为主键,result为普通属性;

association标签指定关联一个类,property属性是它在数据表中的属性名,javaType是关联属性的java类型;

连接查询实现:


其中association标签中:

select属性: 加载另外一个映射语句,可以加载这个属性映射需要的复杂类型,(就是可以再加载指定的映射类型)

column属性:用于给select传递参数,可以将已经获取到的属性值,传递给目标 select 语句作为参数;

一对多查询

数据表实现:使用一个外键进行关联,外键放在多方的表中;

关联属性:可以写在一方的实体类中也可以写在多方的实体类中;

  1. 写在一方中,使用list或别的集合进行关联(一方找多方)
  2. 写在多方中,定义关联对象属性(通过多方找一方)

以多表连接查询为例:

关系:一个国家对应多个部长


通过resultMap进行结果映射,collection标签可以指定映射的集合,其中porperty属性指定的是该关联属性的名称,ofType指定的是集合里面的java类型,id,result标签同resultMap中的一样是对集合里面的属性进行映射;

多表单独查询(嵌套查询):


与一对一中类似,在resultMap的collection中声明中元素类型,然后插入参数,将查询结果进行映射;

自关联查询:

数据表:一张数据表中包含着所有的条目,条目之间为一对多的关系(一个栏目下面包含着多个栏目)

查询方式:连接查询(自己连接自己)和嵌套查询(调用自身查询)

以嵌套查询为例:


这是通过父栏目查询子栏目的自关联查询:

在resultMap中collection的select中调用原来的查询语句进行查询,形成一个循环调用,一直到查询到的子栏目为空的时候停止;最后对查询结果进行映射。

当然,也可通过子栏目查找它的所有的父栏目;

多对多查询

数据表:需要用一张中间表表示多对多的关系,这张中间表引入两张表的主键作为外键;

查询方式:

  1. 多表连接查询,不需要定义中间表实体类
  2. 多表嵌套查询,需要定义中间表实体类
  3. 多表复杂查询,不需要定义中间表实体类,但是返回值是一个List;

多表嵌套查询定义中间实体类:

由于两张表之间分别单独查询,需要通过中间表查找关联并使用resultMap进行映射关系处理,resultMap需要指明映射的java的类,并在实体类中定义关联属性才可以得到关联属性的信息;简单来说:一张表查询完之后想要得到另一张表的信息,实际上是通过中间表来进行映射得到另一张表的信息的;

多表复杂查询:通过一张表先和中间表进行连接查询,然后再查询另一张表的信息;


复杂查询返回值是一个List:

由于一张表先和中间表连接,而中间表是多对多的关系;所以得到一个一对多的List形式查询结果;

类似这样一对多:


总结:

实际上除了数据库的知识以外,Mybatis中的关联关系实现,主要通过resultMap来实现的

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Java基于elasticsearch实现集群管理

    Java基于elasticsearch实现集群管理

    这篇文章主要介绍了java基于elasticsearch实现集群管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 深入讲解基于JDK的动态代理机制

    深入讲解基于JDK的动态代理机制

    众所周知相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,下面这篇文章主要给大家介绍了关于基于JDK的动态代理机制的相关资料,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • Java 深入浅出掌握Map集合之双列集合

    Java 深入浅出掌握Map集合之双列集合

    双列集合是每个元素都有键与值两部分组成的集合,记录的是键值对对应关系,即通过键可以找到值,键必须是唯一,值可以重复,接下来跟着小编具体了解吧
    2021-11-11
  • springMVC详细介绍

    springMVC详细介绍

    下面小编就为大家带来一篇基于Spring MVC 详细介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • 关于RabbitMQ的Channel默认线程

    关于RabbitMQ的Channel默认线程

    这篇文章主要介绍了关于RabbitMQ的Channel默认线程,通过jvm工具观察rabbitmq的线程使用情况,发现生产者每发一条消息,消费者这边就会创建一条线程,言下之意,一个channel当消息来到时就会异步处理这些消息,需要的朋友可以参考下
    2023-09-09
  • 使用Sharding-JDBC对数据进行分片处理详解

    使用Sharding-JDBC对数据进行分片处理详解

    这篇文章主要介绍了使用Sharding-JDBC对数据进行分片处理详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java数据结构之简单链表的定义与实现方法示例

    Java数据结构之简单链表的定义与实现方法示例

    这篇文章主要介绍了Java数据结构之简单链表的定义与实现方法,简单描述了链接的概念、原理,并结合实例形式分析了java定义与使用链表的相关步骤与操作技巧,需要的朋友可以参考下
    2017-10-10
  • Springboot项目启动找不到启动类的解决

    Springboot项目启动找不到启动类的解决

    这篇文章主要介绍了Springboot项目启动找不到启动类的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java超详细讲解如何生成随机整数

    Java超详细讲解如何生成随机整数

    在 Java 中,生成随机数的场景有很多,所以本文我们就来盘点一下 几种生成随机数的方式,以及它们之间的区别和每种生成方式所对应的场景
    2022-05-05
  • Spring boot整合jsp和tiles模板示例

    Spring boot整合jsp和tiles模板示例

    这篇文章主要介绍了Spring boot整合jsp模板和tiles模板的示例演示过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论