ssm整合框架后,在开发中我们遇到的一般不是一张表的查询,有时候会是两张,三张甚至更多。那多表的联合查询又该怎么处理。今天我们一起来学习一下。
首先在进行查询之前我们要明白,这些表是什么关系。一般的关系有,一对一,一对多,多对多,多对一。这些在设计初期的数据库创建中就应该设计好了(E-R图)。现在咱们一起来设计一个。
就拿图书管理系统来说一下吧。
首先是E-R的设计:
图书信息:图书id ,书名,作者,出版社,入库时间,总数,地点信息
地址信息:地址id,具体地址,种类信息
种类信息:种类id,种类名称
这里是我的设计表结构(没有遵循范式)
图书与地址是多对一的关系,地址跟种类是多对一的关系
![22cf505b78f9063d214ba47e527d853d.png](https://img-blog.csdnimg.cn/img_convert/22cf505b78f9063d214ba47e527d853d.png)
![283316857b6d40973e98d891de14f7db.png](https://img-blog.csdnimg.cn/img_convert/283316857b6d40973e98d891de14f7db.png)
![da092ae62be8e6a47e7a3c309e997e30.png](https://img-blog.csdnimg.cn/img_convert/da092ae62be8e6a47e7a3c309e997e30.png)
设计完表之后进行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 中尽量不要写 *