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

Hibernate HQL的子查询

阅读更多

子查询是SQL中很重要的功能,他可以在SQL中利用另外一条SQL的查询结果,HQL同样支持此机制

如果子查询返回都条记录,可以用以下关键字进行量化

all: 表示所有记
any:表示所有记录中的任意1条
some:与any用法一样
in:与=any等价
exist: 表示子查询至少要返回一条记录

数据库结构:

 


create table testStu (id varchar(32),name varchar(32),age int,team_id varchar(32));

insert into teststu values("1","tom1",11,"1");
insert into teststu values("2","tom2",12,"2");
insert into teststu values("3","tom3",13,"1");
insert into teststu values("4","tom4",14,"2");
insert into teststu values("5","tom5",15,"1");
insert into teststu values("6","tom6",16,"2");
insert into teststu values("7","tom7",17,"1");
insert into teststu values("8","tom8",18,"2");
insert into teststu values("9","tom9",19,"1");
insert into teststu values("10","tom10",20,"2");


create table testteam (id varchar(32primary key,name varchar(32));

insert into testteam values("1","team1");
insert into testteam values("2","team2");

 

POJO:

 

package Search.filter;

public class TestStu ...{
    
private String id; //标识id
    private String name; //学生姓名
    private int age; //岁数
    private TestTeam team;
  

     
public int getAge() ...{
        
return age;
    }


    
public String getName() ...{
        
return name;
    }




    
public void setId(String id) ...{
        
this.id = id;
    }


    
public void setAge(int age) ...{
        
this.age = age;
    }


    
public void setName(String stuName) ...{
        
this.name = stuName;
    }




    
public String getId() ...{
        
return id;
    }


    
public TestStu() ...//无参的构造函数
    }


    
public TestTeam getTeam() ...{
        
return team;
    }


    
public void setTeam(TestTeam team) ...{
        
this.team = team;
    }


}



package Search.filter;

import java.util.Set;

public class TestTeam ...{
   
private String id;
   
private String name;
   
private Set students;
public String getId() ...{
    
return id;
}

public void setId(String id) ...{
    
this.id = id;
}

public String getName() ...{
    
return name;
}

public void setName(String name) ...{
    
this.name = name;
}

public Set getStudents() ...{
    
return students;
}

public void setStudents(Set students) ...{
    
this.students = students;
}

}

 

Hibernate.cfg.xml

 

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
    
<property name="connection.username">root</property>
    
<property name="connection.url">
        jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312
&amp;useUnicode=true
    
</property>
    
<property name="dialect">
        org.hibernate.dialect.MySQLDialect
    
</property>
    
<property name="myeclipse.connection.profile">mysql</property>
    
<property name="connection.password">1234</property>
    
<property name="connection.driver_class">
        com.mysql.jdbc.Driver
    
</property>
    
<property name="hibernate.dialect">
        org.hibernate.dialect.MySQLDialect
    
</property>
    
<property name="hibernate.show_sql">true</property>
    
<property name="current_session_context_class">thread</property>
    
<mapping resource="Search/sub/TestStu.hbm.xml" />
    
<mapping resource="Search/sub/TestTeam.hbm.xml" />

</session-factory>

</hibernate-configuration>

 

TestStu.hbm.xml

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping package="Search.fetch" >
   
    
<class name="Search.sub.TestStu" table="teststu" lazy="true">
       
<id name="id" column="id" unsaved-value="null">
         
<generator class="uuid.hex"></generator>
       
</id>

       
<property name="name" column="name"></property>
       
<property name="age" column="age"></property>
       
<many-to-one name="team" column="team_id">
       
</many-to-one>
      
</class>
</hibernate-mapping>


TestTeam.hbm.xml

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate&n
分享到:
评论

相关推荐

    Hibernate-HQL.rar_HQL_hibernate hql

    2. 子查询:可以在WHERE或HAVING子句中嵌套HQL查询,如“SELECT u FROM User u WHERE u.id IN (SELECT f.userId FROM Friend f WHERE f.friendId=100)”。 3. 动态HQL:通过Criteria API或Query接口,可以构建动态...

    Hibernate HQL查询.docx

    除了基本的查询之外,HQL 还支持更复杂的查询,例如连接查询、子查询以及分页查询等。 1. **连接查询** - 使用 `JOIN` 关键字进行连接查询。 - 示例:查询所有用户的订单信息。 ```java String hql = "SELECT u...

    HibernateHql综合测试小程序

    本程序“HibernateHql综合测试小程序”是针对Hibernate中的HQL(Hibernate Query Language)进行的一系列功能测试,涵盖了二十多种不同的HQL语句,旨在帮助开发者深入理解和熟练运用Hibernate的查询能力。...

    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-查询-Query资料

    - HQL支持在SELECT、FROM、WHERE子句中使用子查询。 - 子查询可以返回单个值,也可以返回对象列表。 8. **参数化查询** - 使用问号(?)作为占位符,防止SQL注入攻击。 - 可以使用Query接口的setParameter()...

    Hibernate HQL 结合 velocity

    HQL支持各种复杂的查询操作,如聚合函数、连接查询、子查询等。 **Velocity** 的核心概念是模板,开发者可以在模板中嵌入Java表达式,这些表达式会根据运行时的数据上下文进行计算。Velocity模板语言(VTL)简洁且...

    Hibernate 课件_HQL

    - **定义**:子查询是在一个查询内部包含另一个查询的情况。 - **示例**: - `Query query = session.createQuery("from User u where u.id in (select r.userId from Role r where r.roleName = 'admin')");` ###...

    hibernate 中HQL语句查询学习笔记

    子查询是在另一个查询内部的查询,可以用于多种复杂的场景。 ##### 嵌套子查询的概念 子查询通常用于比较、筛选等操作。 ##### 带有IN谓词的子查询 用于检查值是否存在于另一个查询结果中: ```hql SELECT s ...

    hibernate子查询

    在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...

    Hibernate HQL详解.docx

    Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作数据库的一种面向对象的查询语言。它允许开发者用面向对象的方式来编写查询语句,极大地提高了开发效率和代码的可读性。以下是对HQL的...

    hibernate_hql.rar_HQL

    五、HQL子查询 HQL允许在查询中嵌套查询,子查询可以作为查询条件或者返回结果的一部分。比如,找出年龄大于平均年龄的用户: ```java String hql = "from User where age &gt; (select avg(age) from User)"; ``` 六...

    Hibernate 函数 ,子查询 和原生SQL查询

    在Hibernate中,子查询可用于以下场景: 1. **IN/NOT IN操作符**:`from Entity e where e.id in (select id from AnotherEntity)`,这样的查询会找出存在于另一个实体的结果。 2. **比较操作符**:`from Entity e...

    hibernate hql大全

    **子查询** HQL中可以嵌套子查询,如下所示: ```java from Employee e where e.id in (select e2.id from Employee e2 where e2.age &gt; 30) ``` 这将返回所有年龄大于30的员工的ID。 ### 7. **命名查询** 在...

    hibernate hql语句 投影查询的三种方式.docx

    在Hibernate框架中,HQL(Hibernate Query Language)是用于操作对象关系映射的查询语言,类似于SQL,但它是面向对象的。本篇文章将详细介绍在Hibernate中进行投影查询的三种主要方式:直接查询、查询返回对象以及...

    Hibernate中的查询:HQL、Criteria、原生SQl

    HQL支持复杂的查询,如分组、排序、联接、子查询等,且能自动处理对象关系映射,提高了代码的可读性和可维护性。 二、Criteria API Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口...

    hibernate-HQL用例

    5. **子查询** HQL允许在查询语句中嵌套查询,这对于复杂条件的筛选非常有用。如找出年龄大于所有用户平均年龄的用户: ```sql SELECT u FROM User u WHERE u.age &gt; (SELECT AVG(age) FROM User) ``` 6. **参数...

    Hibernate HQL教程

    - **解释**: 子查询是在另一个查询语句内部的查询,用于增强查询的灵活性和表达能力。 ##### 1.3.2 带有IN谓词的子查询 - **语法**: ```hql SELECT s FROM Student s WHERE s.sdept IN (SELECT c.cname FROM ...

    hibernate02:session对象、hql查询、在线查询也叫对象查询、离线查询

    HQL支持各种操作,如选择、投影、连接、分组、排序等,还可以进行复杂的条件查询和子查询。例如,以下是一个简单的HQL查询示例,用于获取所有年龄大于30岁的用户: ```java String hql = "FROM User WHERE age &gt; 30...

Global site tag (gtag.js) - Google Analytics