`
liuxinpeng
  • 浏览: 6709 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HQL (九) 连接查询

阅读更多

http://wlh269.iteye.com/blog/322050

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

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

Java代码 复制代码
  1. packagecom.wlh.hibernate;
  2. importjava.util.Iterator;
  3. importjava.util.List;
  4. importjunit.framework.TestCase;
  5. importorg.hibernate.Session;
  6. publicclassJoinQueryTestextendsTestCase{
  7. /**
  8. *内联结
  9. */
  10. publicvoidtestQuery1(){
  11. Sessionsession=null;
  12. try{
  13. session=HibernateUtils.getSession();
  14. session.beginTransaction();
  15. //====关键字join==========//
  16. Liststudents=session.createQuery("selects.name,c.namefromStudentsjoins.classesc").list();
  17. for(Iteratoriter=students.iterator();iter.hasNext();){
  18. Object[]o=(Object[])iter.next();
  19. System.out.println("id="+o[0]+",o[1]"+o[0]);
  20. }
  21. session.getTransaction().commit();
  22. }catch(Exceptione){
  23. e.printStackTrace();
  24. session.getTransaction().rollback();
  25. }finally{
  26. HibernateUtils.closeSession(session);
  27. }
  28. }
  29. /**
  30. *内联结
  31. */
  32. publicvoidtestQuery2(){
  33. Sessionsession=null;
  34. try{
  35. session=HibernateUtils.getSession();
  36. session.beginTransaction();
  37. //=======关键字innerjoin默认就是内连接,所以inner可以加上,也可以省略======//
  38. Liststudents=session.createQuery("selects.name,c.namefromStudentsinnerjoins.classesc").list();
  39. for(Iteratoriter=students.iterator();iter.hasNext();){
  40. Object[]o=(Object[])iter.next();
  41. System.out.println("id="+o[0]+",o[1]"+o[0]);
  42. }
  43. session.getTransaction().commit();
  44. }catch(Exceptione){
  45. e.printStackTrace();
  46. session.getTransaction().rollback();
  47. }finally{
  48. HibernateUtils.closeSession(session);
  49. }
  50. }
  51. /**
  52. *内联结
  53. */
  54. publicvoidtestQuery3(){
  55. Sessionsession=null;
  56. try{
  57. session=HibernateUtils.getSession();
  58. session.beginTransaction();
  59. //===========用"="实现内联===========//
  60. Liststudents=session.createQuery("selects.name,c.namefromStudents,Classescwheres.classes.id=c.id").list();
  61. for(Iteratoriter=students.iterator();iter.hasNext();){
  62. Object[]o=(Object[])iter.next();
  63. System.out.println("id="+o[0]+",o[1]"+o[0]);
  64. }
  65. session.getTransaction().commit();
  66. }catch(Exceptione){
  67. e.printStackTrace();
  68. session.getTransaction().rollback();
  69. }finally{
  70. HibernateUtils.closeSession(session);
  71. }
  72. }
  73. [b][color=red]外联接:能够查出2个表之间不相互关联的记录[/color][/b]
  74. <PREclass=javaname="code"></PRE>
  75. <BR>
  76. <BR>/**
  77. <BR>*外联结
  78. <BR>*/
  79. <BR>publicvoidtestQuery4(){
  80. <BR>Sessionsession=null;
  81. <BR>try{
  82. <BR>session=HibernateUtils.getSession();
  83. <BR>session.beginTransaction();
  84. <BR>//查询出所有的学生(包括没有班级的学生)
  85. <BR>Liststudents=session.createQuery("selects.name,c.namefromStudentsleftjoins.classesc").list();
  86. <BR>for(Iteratoriter=students.iterator();iter.hasNext();){
  87. <BR>Object[]o=(Object[])iter.next();
  88. <BR>System.out.println("id="+o[0]+",o[1]="+o[1]);
  89. <BR>}
  90. <BR>session.getTransaction().commit();
  91. <BR>}catch(Exceptione){
  92. <BR>e.printStackTrace();
  93. <BR>session.getTransaction().rollback();
  94. <BR>}finally{
  95. <BR>HibernateUtils.closeSession(session);
  96. <BR>}
  97. <BR>}
  98. <BR>
  99. <BR>
  100. <BR>
  101. <BR>/**
  102. <BR>*外联结
  103. <BR>*/
  104. <BR>publicvoidtestQuery5(){
  105. <BR>Sessionsession=null;
  106. <BR>try{
  107. <BR>session=HibernateUtils.getSession();
  108. <BR>session.beginTransaction();
  109. <BR>//查询出所有的班级,(包括没有学生的班级)
  110. <BR>Liststudents=session.createQuery("selects.name,c.namefromStudentsrightjoins.classesc").list();
  111. <BR>for(Iteratoriter=students.iterator();iter.hasNext();){
  112. <BR>Object[]o=(Object[])iter.next();
  113. <BR>System.out.println("id="+o[0]+",o[1]="+o[1]);
  114. <BR>}
  115. <BR>session.getTransaction().commit();
  116. <BR>}catch(Exceptione){
  117. <BR>e.printStackTrace();
  118. <BR>session.getTransaction().rollback();
  119. <BR>}finally{
  120. <BR>HibernateUtils.closeSession(session);
  121. <BR>}
  122. <BR>}
  123. <BR>
  124. <BR>
  125. <BR>}

分享到:
评论

相关推荐

    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