Mybatis中三种关联关系的实现
2019-10-18 08:43:31来源:博客园 阅读 ()
Mybatis中三种关联关系的实现
目录
一对一查询
一对多查询
自关联查询:
多对多查询
总结:
三种关联关系:一对多,一对一,多对多
两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询)
每一种关联关系都可以通过嵌套查询和连接查询来实现。
嵌套查询相当于进行了两次查询,而连接查询将两张表连接然后再进行查询,这样只进行了一次查询
由于数据表要对实体类进行映射,所以每一种关联关系中都需要在java类中定义属性来进行关联,可以通过如图关联:
一对一查询
数据表实现:通过A表的主键引用B表的主键作为外键,就是说在A中主键和外键同一字段。
查询方式:嵌套查询,连接查询;
关系:丈夫和妻子(Husband Wife)
嵌套查询实现:
在实体类husband中关联wife,进行连接查询之后,需要使用resultMap对查出来的结果进行结果映射;
resultMap中type属性指定映射的类型;id标签为主键,result为普通属性;
association标签指定关联一个类,property属性是它在数据表中的属性名,javaType是关联属性的java类型;
连接查询实现:
其中association标签中:
select属性: 加载另外一个映射语句,可以加载这个属性映射需要的复杂类型,(就是可以再加载指定的映射类型)
column属性:用于给select传递参数,可以将已经获取到的属性值,传递给目标 select 语句作为参数;
一对多查询
数据表实现:使用一个外键进行关联,外键放在多方的表中;
关联属性:可以写在一方的实体类中也可以写在多方的实体类中;
- 写在一方中,使用list或别的集合进行关联(一方找多方)
- 写在多方中,定义关联对象属性(通过多方找一方)
以多表连接查询为例:
关系:一个国家对应多个部长
通过resultMap进行结果映射,collection标签可以指定映射的集合,其中porperty属性指定的是该关联属性的名称,ofType指定的是集合里面的java类型,id,result标签同resultMap中的一样是对集合里面的属性进行映射;
多表单独查询(嵌套查询):
与一对一中类似,在resultMap的collection中声明中元素类型,然后插入参数,将查询结果进行映射;
自关联查询:
数据表:一张数据表中包含着所有的条目,条目之间为一对多的关系(一个栏目下面包含着多个栏目)
查询方式:连接查询(自己连接自己)和嵌套查询(调用自身查询)
以嵌套查询为例:
这是通过父栏目查询子栏目的自关联查询:
在resultMap中collection的select中调用原来的查询语句进行查询,形成一个循环调用,一直到查询到的子栏目为空的时候停止;最后对查询结果进行映射。
当然,也可通过子栏目查找它的所有的父栏目;
多对多查询
数据表:需要用一张中间表表示多对多的关系,这张中间表引入两张表的主键作为外键;
查询方式:
- 多表连接查询,不需要定义中间表实体类
- 多表嵌套查询,需要定义中间表实体类
- 多表复杂查询,不需要定义中间表实体类,但是返回值是一个List;
多表嵌套查询定义中间实体类:
由于两张表之间分别单独查询,需要通过中间表查找关联并使用resultMap进行映射关系处理,resultMap需要指明映射的java的类,并在实体类中定义关联属性才可以得到关联属性的信息;简单来说:一张表查询完之后想要得到另一张表的信息,实际上是通过中间表来进行映射得到另一张表的信息的;
多表复杂查询:通过一张表先和中间表进行连接查询,然后再查询另一张表的信息;
复杂查询返回值是一个List:
由于一张表先和中间表连接,而中间表是多对多的关系;所以得到一个一对多的List形式查询结果;
类似这样一对多:
总结:
实际上除了数据库的知识以外,Mybatis中的关联关系实现,主要通过resultMap来实现的;
原文链接:https://www.cnblogs.com/gbetter/p/11698580.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:linux工具之screen
下一篇:Mybatis 学习 一
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- Java实现的三种字符串反转 2020-06-09
- 天哪!手动编写mybatis雏形竟然这么简单 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash