leftjoin多表联合查询_Mybatis的多表联合查询

ssm整合框架后,在开发中我们遇到的一般不是一张表的查询,有时候会是两张,三张甚至更多。那多表的联合查询又该怎么处理。今天我们一起来学习一下。

首先在进行查询之前我们要明白,这些表是什么关系。一般的关系有,一对一,一对多,多对多,多对一。这些在设计初期的数据库创建中就应该设计好了(E-R图)。现在咱们一起来设计一个。

就拿图书管理系统来说一下吧。

首先是E-R的设计:

图书信息:图书id ,书名,作者,出版社,入库时间,总数,地点信息

地址信息:地址id,具体地址,种类信息

种类信息:种类id,种类名称

这里是我的设计表结构(没有遵循范式)

图书与地址是多对一的关系,地址跟种类是多对一的关系

22cf505b78f9063d214ba47e527d853d.png
books表(图书)

283316857b6d40973e98d891de14f7db.png
kind表(种类)

da092ae62be8e6a47e7a3c309e997e30.png
area表(地址)

设计完表之后进行bean的编写,这里要注意的是,因为我们设计了表的关系后要在每个bean中创建出关系来

比如,books表与地址表的关系是多对一的关系后可以在books类中创建一个kind的类属性,如果是一对多的时候要创建一个List<Kind>来存储,好,我们开始。

bean类中的重点就是创建对应的关系,这里

Books

@Data

Area

@Data

Kind

@Data

我们就查出全部的图书吧

以前总结了一个对多用collection,对一用association

在查询的时候有两种可以选择一种是查询映射,一种是结果映射。

查询映射:

BooksMapper.xml

<resultMap 

这里讲一下assocation中的标签,

property只得的Books中定义的area属性名,

column对应的是数据库中的外键,

javaType对应的是这个属性的类型,这里是area对象类型,所以是area。在对多的时候是java.util.ArrayList

select 对应的是下一个要查询的id,这里是AreaMapper下面的id 为getAreaAll的查询

这里比collection中少了一个ofType,用法与javaType的相同也是指明bean类,

下一个是AreaMapper

<resultMap 

这里的aid是对应的外键

KindMapper

<resultMap 

中间过程

mapper对应的接口中的方法

List

进行测试,之前咱们已经学习了spring的junit4测试了,那就测测测!!!

@RunWith

测试结果

[com.zmz.entity.Books@75c56eb9, com.zmz.entity.Books@4bc222e, com.zmz.entity.Books@2dc9b0f5, com.zmz.entity.Books@6531a794, com.zmz.entity.Books@3b5fad2d, com.zmz.entity.Books@5e17553a]

这里没有遍历所以是编码,如果想要显示出来可以foreach一下,这里就不写了,嗯,这就是查询映射。结果映射要比这个简单一点,主要是sql语句,

结果映射:

BooksMapper:

<mapper 

这里使用的是内连接。你看这是sql语句有点复杂,这里select 中尽量不要写 *

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值