`
wlh269
  • 浏览: 455858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HQL (九) 连接查询

阅读更多
连接查询(重要)
* 内连接
* 外连接(左连接/右连接)
参见:JoinQueryTest.java

内连接有三种:inner join ,join,“=”

package com.wlh.hibernate;

import java.util.Iterator;
import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;

public class JoinQueryTest extends TestCase{
	
	/**
	 * 内联结
	 */
	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			 //====关键字join==========//
			List students=session.createQuery("select s.name ,c.name from Student s join s.classes c").list();
			for(Iterator iter=students.iterator();iter.hasNext();){
				Object [] o=(Object [])iter.next();
				System.out.println("id="+o[0]+",o[1]"+o[0]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
	
	/**
	 * 内联结
	 */
	public void testQuery2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			 //=======关键字inner join 默认就是内连接,所以inner可以加上,也可以省略======//
			List students=session.createQuery("select s.name, c.name from Student s inner join s.classes c").list();
			for(Iterator iter=students.iterator();iter.hasNext();){
				Object [] o=(Object [])iter.next();
				System.out.println("id="+o[0]+",o[1]"+o[0]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
	
	/**
	 * 内联结
	 */
	public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			//===========用"="实现内联===========//
			List students=session.createQuery("select s.name ,c.name from Student s ,Classes c where s.classes.id=c.id").list();
			for(Iterator iter=students.iterator();iter.hasNext();){
				Object [] o=(Object [])iter.next();
				System.out.println("id="+o[0]+",o[1]"+o[0]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
	

[b][color=red]外联接:能够查出2个表之间不相互关联的记录[/color]	[/b]
         



 
    /**
* 外联结
*/
public void testQuery4() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//查询出所有的学生(包括没有班级的学生)
List students=session.createQuery("select s.name ,c.name from Student s  left join s.classes c").list();
for(Iterator iter=students.iterator();iter.hasNext();){
Object [] o=(Object [])iter.next();
System.out.println("id="+o[0]+",o[1]="+o[1]);
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}



/**
* 外联结
*/
public void testQuery5() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//查询出所有的班级,(包括没有学生的班级)
List students=session.createQuery("select s.name ,c.name from Student s  right join s.classes c").list();
for(Iterator iter=students.iterator();iter.hasNext();){
Object [] o=(Object [])iter.next();
System.out.println("id="+o[0]+",o[1]="+o[1]);
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}


}

分享到:
评论

相关推荐

    HQL连接查询和注解使用总结

    ### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...

    hql多表查询

    HQL支持多种查询方式,包括单表查询、多表查询、连接查询等。其中,多表查询是处理复杂数据关系的关键技术,它允许开发者在一个查询语句中同时操作多个表,从而提高数据处理的效率和查询的灵活性。多表查询通常涉及...

    hibernateHQL关联查询

    Hibernate HQL关联查询遵循了SQL中连接查询的概念,但在语法上有所区别,使其更符合面向对象编程的习惯。Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java ...

    HQL 连接查询

    ### HQL连接查询详解 #### 一、HQL连接查询概述 在开发过程中,当我们需要从数据库中的多个表中获取数据时,经常会用到连接查询(Join Query)。HQL(Hibernate Query Language)作为Hibernate框架提供的查询语言...

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    SSH笔记-HQL查询、QBC、本地SQL查询

    SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询

    Hibernate之HQL查询

    HQL支持内连接(INNER JOIN)、左连接(LEFT JOIN)等,可以方便地处理关联关系。例如: ```sql SELECT s, c FROM Student s LEFT JOIN s.courses c ``` 这个查询将返回每个学生及其所有关联的课程。 **6. HQL的聚合...

    Hibernate hql查询语法总结

    HQL支持SQL的连接查询,包括内连接、左外连接、右外连接和全连接(不常用)。例如,使用内连接: ```java select a.id, b.id from A a inner join B b on a.id = b.id ``` 等价于SQL中的`INNER JOIN`。查询结果通常...

    HQL多对多的查询语句分析

    HQL(Hibernate Query Language)是Hibernate框架提供的面向对象的查询语言,它允许开发者用类名和属性名称来执行SQL查询,使得代码更加易读且与数据库无关。本文将深入分析HQL在处理多对多关系时的查询语句及其应用...

    hibernateHQL基本查询

    - **连接查询**:可以使用 `join` 关键字进行连接查询,以获取多个表中的数据。 #### 六、总结 HQL 提供了一种简洁高效的查询方式,不仅减少了代码量,还提高了代码的可读性和可维护性。通过上述示例,我们可以看到...

    Hibernate实例开发 HQL 与 QBC 查询

    HQL的强大之处在于它可以处理复杂的查询,比如分组、排序、连接等,例如: ```java query = session.createQuery("from User u join u.roles r where r.name = 'Admin'"); users = query.list(); ``` 这个查询将...

    hql查询语句

    HQL还支持连接查询和子查询,可以处理复杂的数据关系。通过理解并熟练运用这些HQL语句,开发者可以更加高效地操作数据库,提升应用程序的性能和可维护性。在实际项目中,合理运用HQL能大大简化数据查询和处理的工作...

    HQL Hibernate查询语言

    HQL Hibernate 查询语言 HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解...

    hibernate 查询?Hibernate的HQL查询

    它支持连接(inner/outer/full joins)、投影、聚合、分组、排序、子查询以及SQL函数调用。 2. 简单HQL示例: ```java Query query = session.createQuery("from User user where user.name like 'J%'"); List...

    hibernate_hql.rar_HQL

    HQL支持基本查询、聚合函数、分组、排序、子查询以及连接查询等多种操作,使得数据库查询更加灵活和高效。 一、HQL基本查询 HQL的基本查询语法与SQL类似,但更加面向对象。例如,要查询所有User对象,HQL语句可以写...

    hql语句经典教程

    Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它在外观上类似于SQL,但具有显著的面向对象特性,如支持继承、多态和关联。本教程将深入讲解HQL的基本概念、用法和特性。 ### 1. 大小...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    Hibernate 多表连接分页查询示范项目

    Hibernate 支持多种方式来实现多表连接查询,包括 HQL(Hibernate Query Language)和 Criteria 查询。本项目主要关注 Criteria API 的使用,这是一种基于 Java 对象的查询方式,更加灵活且易于理解和维护。 **...

Global site tag (gtag.js) - Google Analytics