子查询是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(32) primary 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&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
分享到:
相关推荐
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接口,可以构建动态...
除了基本的查询之外,HQL 还支持更复杂的查询,例如连接查询、子查询以及分页查询等。 1. **连接查询** - 使用 `JOIN` 关键字进行连接查询。 - 示例:查询所有用户的订单信息。 ```java String hql = "SELECT u...
本程序“HibernateHql综合测试小程序”是针对Hibernate中的HQL(Hibernate Query Language)进行的一系列功能测试,涵盖了二十多种不同的HQL语句,旨在帮助开发者深入理解和熟练运用Hibernate的查询能力。...
它支持连接(inner/outer/full joins)、投影、聚合、分组、排序、子查询以及SQL函数调用。 2. 简单HQL示例: ```java Query query = session.createQuery("from User user where user.name like 'J%'"); List...
- HQL支持在SELECT、FROM、WHERE子句中使用子查询。 - 子查询可以返回单个值,也可以返回对象列表。 8. **参数化查询** - 使用问号(?)作为占位符,防止SQL注入攻击。 - 可以使用Query接口的setParameter()...
HQL支持各种复杂的查询操作,如聚合函数、连接查询、子查询等。 **Velocity** 的核心概念是模板,开发者可以在模板中嵌入Java表达式,这些表达式会根据运行时的数据上下文进行计算。Velocity模板语言(VTL)简洁且...
- **定义**:子查询是在一个查询内部包含另一个查询的情况。 - **示例**: - `Query query = session.createQuery("from User u where u.id in (select r.userId from Role r where r.roleName = 'admin')");` ###...
子查询是在另一个查询内部的查询,可以用于多种复杂的场景。 ##### 嵌套子查询的概念 子查询通常用于比较、筛选等操作。 ##### 带有IN谓词的子查询 用于检查值是否存在于另一个查询结果中: ```hql SELECT s ...
在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...
Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作数据库的一种面向对象的查询语言。它允许开发者用面向对象的方式来编写查询语句,极大地提高了开发效率和代码的可读性。以下是对HQL的...
五、HQL子查询 HQL允许在查询中嵌套查询,子查询可以作为查询条件或者返回结果的一部分。比如,找出年龄大于平均年龄的用户: ```java String hql = "from User where age > (select avg(age) from User)"; ``` 六...
在Hibernate中,子查询可用于以下场景: 1. **IN/NOT IN操作符**:`from Entity e where e.id in (select id from AnotherEntity)`,这样的查询会找出存在于另一个实体的结果。 2. **比较操作符**:`from Entity e...
**子查询** HQL中可以嵌套子查询,如下所示: ```java from Employee e where e.id in (select e2.id from Employee e2 where e2.age > 30) ``` 这将返回所有年龄大于30的员工的ID。 ### 7. **命名查询** 在...
在Hibernate框架中,HQL(Hibernate Query Language)是用于操作对象关系映射的查询语言,类似于SQL,但它是面向对象的。本篇文章将详细介绍在Hibernate中进行投影查询的三种主要方式:直接查询、查询返回对象以及...
HQL支持复杂的查询,如分组、排序、联接、子查询等,且能自动处理对象关系映射,提高了代码的可读性和可维护性。 二、Criteria API Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口...
5. **子查询** HQL允许在查询语句中嵌套查询,这对于复杂条件的筛选非常有用。如找出年龄大于所有用户平均年龄的用户: ```sql SELECT u FROM User u WHERE u.age > (SELECT AVG(age) FROM User) ``` 6. **参数...
- **解释**: 子查询是在另一个查询语句内部的查询,用于增强查询的灵活性和表达能力。 ##### 1.3.2 带有IN谓词的子查询 - **语法**: ```hql SELECT s FROM Student s WHERE s.sdept IN (SELECT c.cname FROM ...
HQL支持各种操作,如选择、投影、连接、分组、排序等,还可以进行复杂的条件查询和子查询。例如,以下是一个简单的HQL查询示例,用于获取所有年龄大于30岁的用户: ```java String hql = "FROM User WHERE age > 30...