Hibernate入门第十三讲——Hibernate中的多表查询

这篇博客详细介绍了Hibernate中多表查询的实现,包括SQL的连接查询(交叉连接、内连接、外连接)和HQL查询(内连接、外连接、迫切内连接)。通过实例解析了各种连接方式的用法和区别,帮助读者理解如何在Hibernate中进行多表联合查询。
摘要由CSDN通过智能技术生成

在实际开发中,我们不可能只是简简单单地去查询单表,绝大部分都是要对多表进行联合查询的。所以本文就来讲述Hibernate中的多表查询,讲之前,大家可以先复习一下使用SQL语句是如何进行多表查询的。这里我给大家提个醒,本文所有案例代码的编写都是建立在前一讲案例基础之上的!!!

SQL多表查询

SQL的多表查询可分为连接查询和子查询,子查询其实就是SQL嵌套(在这里,它并不是咱的重点,所以我就不展开讲解了),这里我会重点讲解连接查询。

连接查询

连接查询又分为交叉连接(CROSS JOIN)、内连接(INNER JOIN ON)以及外连接。

交叉连接

交叉连接其实是没有实际意义的,它会产生迪卡尔积。例如:

SELECT * FROM cst_customer, cst_linkman;

内连接

使用内连接,它只能将有关联的数据得到,也就是说内连接查询到的是两张表的公共部分。内连接可分为两种,它们分别是隐式内连接和显示内连接。

隐式内连接

内连接有一种隐式内连接,它使用"逗号"将表分开,使用WHERE来消除迪卡尔积。例如:

SELECT * FROM cst_customer c,cst_linkman l WHERE c.cust_id=l.lkm_cust_id;
显示内连接

显示内连接如果写全的话,就像下面这样,但是我们应知道INNER是可以省略的。

SELECT * FROM cst_customer c INNER JOIN cst_linkman l ON c.cust_id=l.lkm_cust_id;

外连接

外连接也可分为两种,它们分别是左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。

左外连接

左外连接是以左表为基准关联数据,说的大白话一点就是它展示的数据只是在左表中有的,右表中没有的不管,也就是说它查询到的是左边表的全部数据以及两张表的公共部分。
左外连接如果写全的话,就像下面这样,但是我们应知道OUTER是可以省略的。

SELECT * FROM cst_customer c LEFT OUTER JOIN cst_linkman l ON c.cust_id=l.lkm_cust_id;
右外连接

右外连接是以右表为基准关联数据,说的大白话一点就是它展示的数据只是在右表中有的,左表中没有的不管,也就是说它查询到的是右边表的全部数据以及两张表的公共部分。
右外连接如果写全的话,就像下面这样,但是我们应知道OUTER是可以省略的。

SELECT * FROM cst_customer c RIGHT OUTER JOIN cst_linkman l ON c.cust_id=l.lkm_cust_id;

HQL多表查询

HQL中的多表查询可分为下面几类。
在这里插入图片描述
温馨提示:在Hibernate框架中有迫切连接的这一概念,而在SQL中是没有的

内连接

显示内连接

显示内连接使用的是inner join with。如果是在MySQL中使用显示内连接,SQL语句是咋写的,你还记得吗?

SELECT * FROM cst_customer c INNER JOIN cst_linkman l ON c.cust_id = l.lkm_cust_id;

但在Hibernate框架中,我们则要这样书写HQL语句,是不是大不同啊!

from Customer c inner join c.linkMans

为了便于测试,我们可以在com.meimeixia.hibernate.demo01包下编写一个HQLJoinTest单元测试类,并在该类中编写这样的一个测试方法:

package com.meimeixia.hibernate.demo01;

import java.util.Arrays;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.meimeixia.hibernate.utils.HibernateUtils;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值