package test; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import util.HibernateSessionFactory; import entity.Student; import entity.Teacher; public class TestInnerJoin { public static void main(String[] args) { jion();// 内连接 leftJoin();// 左外连接 } private static void jion() { // 打开Session Session session = HibernateSessionFactory.getSession(); // 内连接 hql 语句 String hql = "from Student s inner join s.teacher"; try { // 实例查询对象 Query query = session.createQuery(hql); // 获取列表 List<Object[]> lists = query.list(); // 遍历列表 for (Object[] list : lists) { // 判断如果是 Student if (list[0] instanceof Student) { // 获取 Student 的列表 Student student = (Student) list[0]; System.out.print(student.getId() + " " + student.getName()); } // 判断如果是 Teacher if (list[1] instanceof Teacher) { // 获取 Teacher 的列表 Teacher teacher = (Teacher) list[1]; System.out.println(teacher.getId() + " " + teacher.getName() + " "); } } System.out.println("成功"); } catch (HibernateException e) { e.printStackTrace(); } finally { // 关闭 session,释放资源 HibernateSessionFactory.closeSession(); } } private static void leftJoin() { // 打开Session Session session = HibernateSessionFactory.getSession(); // 内连接 hql 语句 String hql = "from Student s left join s.teacher"; try { // 实例查询对象 Query query = session.createQuery(hql); // 获取列表 List<Object[]> lists = query.list(); // 遍历列表 for (Object[] list : lists) { // 判断如果是 Student if (list[0] instanceof Student) { // 获取 Student 的列表 Student student = (Student) list[0]; System.out.print(student.getId() + " " + student.getName()); } // 判断如果是 Teacher if (list[1] instanceof Teacher) { // 获取 Teacher 的列表 Teacher teacher = (Teacher) list[1]; System.out.println(teacher.getId() + " " + teacher.getName() + " "); } } System.out.println("成功"); } catch (HibernateException e) { e.printStackTrace(); } finally { // 关闭 session,释放资源 HibernateSessionFactory.closeSession(); } } }
效果图:
相关推荐
这里使用了`LEFT JOIN FETCH`关键字来实现迫切左外连接,它会确保即使在`Department`中没有对应的`Employee`,也会返回所有的`Department`对象,并且每个`Department`对象的`Employee`集合都会被初始化,包含了所有...
Hibernate支持多种连接类型,包括`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。`with`关键字用于提供额外的连接条件,类似于SQL中的`on`关键字...
HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...
4. **全外连接(Full Outer Join)**:虽然HQL本身不支持全外连接,但可以通过组合左外连接和右外连接来模拟实现。 #### 五、应用场景 在实际开发中,HQL关联查询的应用场景非常广泛,特别是在需要跨多个实体进行...
HQL支持多种连接查询方式,包括内连接、左外连接等,并且可以通过`fetch`关键字来明确指定关联级别的查询策略。 #### 各种连接查询详解 - **内连接(Inner Join)** - 语法:`[inner]join` - 描述:内连接只返回...
- **迫切左外连接检索(Fetch Join)**:兼顾透明性和效率,但可能加载不必要的对象,且复杂的表连接可能影响性能。 2. **查看Hibernate生成的SQL**:在`applicationConfig.xml`中设置`hibernate.show_sql`为`true...
- 支持不同类型的连接:内连接(`inner join`)、左外连接(`left outer join`)、右外连接(`right outer join`)、全连接(`full join`)。 ### 8. `select`子句 - `select`子句用于指定查询结果中包含的对象和...
HQL支持SQL的连接查询,包括内连接、左外连接、右外连接和全连接(不常用)。例如,使用内连接: ```java select a.id, b.id from A a inner join B b on a.id = b.id ``` 等价于SQL中的`INNER JOIN`。查询结果通常...
4. ** Criteria API的Join操作**: 支持多表查询,包括内连接(inner join)、左连接(left join)等。 5. **Criteria API的Projections**: 用于结果集的投影,例如获取平均值、计数等。 **四、事务管理** 1. **...
HQL支持关联查询,包括内连接、左外连接、右外连接和全连接。 - **内连接**:`inner join`用于连接两个实体之间的关联关系,例如`from Cat as cat inner join cat.mate as mate`。 - **左外连接**:`left outer ...
4. **Hibernate配置**:hibernate.cfg.xml文件,定义数据库连接和实体映射。 5. **实体类**:如User类,映射到数据库中的用户表。 通过这个实例,初学者可以了解如何在Struts1中整合Hibernate进行数据库操作,同时...
在Hibernate中,针对关联对象的检索,有三种主要的检索策略:立即检索(Eager Fetching)、延迟检索(Lazy Fetching)和迫切左外连接检索(Anxious Left Join Fetching)。下面将详细探讨这三种策略的特点。 #### 1. 立即...
18.1.8 使用SQL风格的交叉连接和隐式内连接 18.1.9 关联级别运行时的检索策略 18.2 投影查询 18.3 报表查询 18.3.1 使用聚集函数 18.3.2 分组查询 18.3.3 优化报表查询的性能 18.4 高级查询技巧 ...
HQL 支持多种类型的连接操作,包括内连接、左连接、右连接和全连接。这些连接操作可以帮助开发人员在多个表之间建立关联,从而实现更复杂的查询需求。 1. **内连接**: ```hql select employee.ID as id1, ...
HQL支持四种类型的连接:inner join(内连接)、left outer join(左外连接)、right outer join(右外连接)和full join(全连接)。简写形式如`join`和`left join`也是允许的。`fetch`连接用于一次性初始化相关联...
一旦数据库连接建立成功,可以继续添加Hibernate特性到JavaWeb项目中,以便使用Hibernate反向工程功能。具体步骤为: - 切换至MyEclipse Java Enterprise透视图视窗。 - 在项目上右键点击,选择MyEclipse->Add ...
外连接分为左外连接和右外连接,它们分别返回左表或右表的所有记录以及另一表中匹配的记录。在HQL中,左外连接更为常见。 - **左外连接**: - 使用 `LEFT JOIN` 关键字进行连接。 - 示例代码: ```java Query ...
通过以上步骤,我们可以很方便地利用MyEclipse和Hibernate工具来自动生成实体类,极大地提高了开发效率。当然,在实际项目中还需要根据具体情况进行一定的定制化调整,但总体来说,这种方式大大减轻了开发者的工作...
Hibernate通过Hibernate Configuration(配置文件)和SessionFactory(会话工厂)来初始化和管理数据库连接。 ### 2. Maven基础 Maven是Apache开发的项目管理和综合工具,它通过在`pom.xml`文件中定义项目依赖、...