目录

一对一查询

一对多查询

自关联查询:

多对多查询

总结:


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

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

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

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

由于数据表要对实体类进行映射,所以每一种关联关系中都需要在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来实现的;

Mybatis中三种关联关系的实现的更多相关文章

  1. Web组件的三种关联关系

    Web应用程序如此强大的原因之一是它们能彼此链接和聚合信息资源.Web组件之间存在三种关联关系: ●  请求转发 ●  URL重定向 ●  包含 存在以上关联关系的Web组件可以是JSP或Servle ...

  2. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  3. C#中三种定时器对象的比较

    ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...

  4. 转-Web Service中三种发送接受协议SOAP、http get、http post

    原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...

  5. mybatis中两种取值方式?谈谈Spring框架理解?

    1.mybatis中两种取值方式? 回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ ...

  6. C#中三种定时器对象的比较 【转】

    https://www.cnblogs.com/zxtceq/p/5667281.html C#中三种定时器对象的比较 ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.W ...

  7. Spring中三种配置Bean的方式

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

  8. 深入浅出spring IOC中三种依赖注入方式

    深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...

  9. Android中三种超实用的滑屏方式汇总(转载)

    Android中三种超实用的滑屏方式汇总   现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...

随机推荐

  1. 刷题记录:[0CTF 2016]piapiapia

    目录 刷题记录:[0CTF 2016]piapiapia 一.涉及知识点 1.数组绕过正则及相关 2.改变序列化字符串长度导致反序列化漏洞 二.解题方法 刷题记录:[0CTF 2016]piapiap ...

  2. MacOS安装rJava

    rJava出了名的难装,一大堆问题. 核心的问题: 1. java版本问题,最好用1.8版本的java 2. 编译器的问题 3. 相关头文件header的问题 之前几次装过,但都放弃了,这次花了一下午 ...

  3. pg执行计划分析小笔记

    开发同事问,为什么一个标量子查询,放在where子句后进行大小判断,比不放在where子句后进行判断大小运行的更快?按道理加了一次判断,不是应该变慢么? 把语句拿过来,看了一下两个语句的执行计划: 语 ...

  4. Android中Activity的启动模式(LaunchMode)和使用场景

    一.为什么需要启动模式在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些Ac ...

  5. 如何下载官网最新版 win10 系统?

    如何下载官网最新版 win10 系统?步骤: 一. 下载 遨游浏览器 将UA切换成,手机访问:推荐 UC浏览器,UA设置: Mozilla/5.0 (Linux; U; Android 8.0.0; ...

  6. js 经常用于条件判断 大于等于0 的正整数

    /^\d+(?=\.{,}\d+$|$)/.test() // true 转:https://www.jianshu.com/p/feef5e62dd67

  7. 为CentOS安装python3

    摘自:https://www.jianshu.com/p/7c2b62c37223 1. 安装依赖 不要复制往下看 yum install openssl-devel bzip2-devel expa ...

  8. [LeetCode] 496. Next Greater Element I 下一个较大的元素 I

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  9. 【Python学习之四】集合类型

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.字符串:字符串实际上就是字符的数组1.切片是指 ...

  10. Spring boot后台搭建二为Shiro权限控制添加缓存

    在添加权限控制后,添加方法 查看 当用户访问”获取用户信息”.”新增用户”和”删除用户”的时,后台输出打印如下信息 , Druid数据源SQL监控 为了避免频繁访问数据库获取权限信息,在Shiro中加 ...