hibernate学习-多表联查-第7天

逃离我推掉我的手 2022-01-30 12:07 311阅读 0赞

一、DB 基本理论与Hibernate 的多表联查

在这里插入图片描述

1、笛卡儿积

两个分别为 n 个字段和 m 个字段的表 R 与 S 的笛卡儿积是一个(n+m)字段的集合,
记为 R×S。若 R 有 k1条记录,S 有 k2条记录,则 R×S 将有(k1 × k2)条记录。
笛卡儿积查询:select * from R, S
在这里插入图片描述

2、条件连接

从两个表的连接迪卡尔积中挑选出符合连接条件的部分记录的集合。当条件为两个字
段的等值比较时,称为等值连接。
select * from R, S where C=E

3、内连接

与条件连接功能相同,只不过,语法不同。
select * from R inner join S on C=E
inner 可省略: select * from R join S on C=E
在这里插入图片描述
条件连接:select * from R, S where C=E
内连接:select * from R inner join S on C=E

4、左外连接

若是 R 左外连接 S,则保留 R 表中所有记录,连接结果集中 S 表中字段值可能为 NULL。
select * from R left outer join S on R.B=S.B
outer 可省略
select * from R left join S on R.B=S.B
在这里插入图片描述

5、右外连接

若是 R 右外连接 S,则保留 S 表中所有记录,连接结果集中 R 表中字段值可能为 NULL。
select * from R right outer join S on R.B=S.B
outer 可省略
select * from R right join S on R.B=S.B
在这里插入图片描述

二、Hibernate 的多表联查

1、左外连接 HQL 实现

左外连接的查询结果为 List,其泛型为 Object[]。每个 List 元素,即每个 Object[],均包
在这里插入图片描述
含两个数组元素:数组的第一个元素为查询出的 Country 对象。数组的第二个元素为该
Country 对象集合元素中的一个元素,即查询出的 Minister 对象。若 Country 对象的集合属
性中包含多个 Minister 对象,则会生成多个 Object[]元素。
List 元素的个数,等于查询出的每个 Country 对象所包含的集合元素的和。即,若查询
出 3 个 Country 对象,第一个 Country 中包含 2 个 Minister,第二个 Country 中包含 1 个
Minister,第三个 Country 中包含 5个 Minister,则 List 元素的个数为 2 + 1 +5 = 8 个。而这
8 个对象分别为:

2、迫切左外连接 HQL 实现

迫切左外连接的查询结果为 List,但其泛型为 Country。即系统已将查询数据进行了自
动封装。不过,其 List 的元素个数仍为查询出的每个 Country 对象所包含的集合元素的和,
而非 Country 对象的个数,即 List 元素会出现重复现象。
在这里插入图片描述
查看其结果,发现数据重复:该主加载对象有几个关联对象,结果就会重复几次。所
以需要对结果去重。

3、迫切左外连接 HQL 实现(去重)

去重使用关键字 distinct。
在这里插入图片描述

4、左外连接 QBC 实现(去重)

在这里插入图片描述

5、命名查询 namedQuery

所谓 namedQuery,是指 HQL 语句不直接写在 Java 代码中,而是写入到映射文件。Java
代码从映射文件中将被命名的 HQL,通过名称读出执行。
将 HQL 写入到配置文件的好处是,在项目真正上线后,若只需要修改 HQL 就可进行检
索优化,则只需修改配置文件中的 HQL 后,重启服务器即可,无需再编译项目。
在映射文件中通过标签命名定义 HQL,该标签写到哪个映射文件均可。

在这里插入图片描述
Java代码中通过Session的 getNamedQuery()方法可以将映射文件中指定的HQL读取出。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读