`
wlh269
  • 浏览: 449205 次
  • 性别: 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 连接查询

    hibernateHQL关联查询

    Hibernate中的关联查询实际上生成的是数据库表连接查询的SQL语句

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

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

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

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

    hql语句经典教程

    hibernate hql语句 经典教程 实用 全面

    Hibernate HQL教程

    1.3 HQL的嵌套子查询 15 1.3.1 嵌套子查询的概念 15 1.3.2 带有IN谓词的子查询 16 1.3.3 比较子查询 16 1.3.4 带有ANY或ALL的子查询 17 1.4 HQL的多表查询 17 1.4.1 表之间的关联关系 17 1.4.2 表中的数据 18 1.4.3 ...

    NHibernate查询语言(HQL)文档.

    至于关联和连接,多态(polymorphism)查询,子查询在以后具体实 例中学习。注意:HQL 关键字不区分大小写。 注意:由于篇幅有限,我在这里仅仅贴出了数据访问层的代码,就是在业务逻辑层可以直接 调用的方法。测试...

    hibernate中的hql查询案例

    hibernate的hql查询 HQL(Hibernate Query Language),提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。查询的表(Table)名称是类的名称,表的字段是对象的属性,有多个类的话,可以使用类的全...

    HQL的具体内容和使用

    写了数据库的几种连接方式以及各个方式的使用说明!

    BIT datamining hw 1 2017

    数据预处理 BIT大数据作业1 2017

    内连接与外连接的精简写法

    内连接与外连接的精简写法,可用于sql和hql中,即使hql中两实体不存在实际上的主外键关系,也适用。

    C# NHibernate 分页 HQL 源码

    使用vs2010打开解决方案。...连接数据库配置 <property name="connection.connection_string">Server=PC2011022315OVP\SQLEXPRESS;initial catalog=Test;Integrated Security=true 即可。 作者:清如许

    Spring中查询

    Spring中hql查询方法,spring自带的

    基于Jsp的在线考试系统毕业设计论文

    一开始觉得hibernate远没有jdbc直接连数据库简单,后来随着使用hql越来越多发现也不是这样,hibernate查询非常灵活,它的对象导航图就可以很简单的链表查询,hql连接语句也很好用。即使如此,hibernate始终都存在一...

    Hibernate 开发学习手册.CHM

    持续更新ing Hibernate 开发学习手册 Hibernate 基本介绍 Hibernate 之 SQL、 HQL查询 Hibernate 之 Criteria 查询 Hibernate 整合 C3P0 连接池

    配电网监测数据的分布式Map压缩-查询技术

    通过将监测数据分布式Map压缩存储,利用HQL查询引擎及压缩接口将分布式Map压缩应用到连接查询的混洗阶段中,减小传递到查询聚合端的数据量,提高压缩数据的查询速度,并推导了时效性的相关公式。以北京某动车段10 kV...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任 务,如: select * from table ) ...

Global site tag (gtag.js) - Google Analytics