Hibernate HQL 教程:基础知识、进阶技术和多表查询

需积分: 9 2 下载量 183 浏览量 更新于2024-07-29 收藏 353KB DOC 举报
Hibernate_HQL教程 HQL(Hibernate Query Language)是 Hibernate 官方推荐的查询语言,用于从数据库中检索数据。HQL 使用类似 SQL 的查询语言,以面向对象的方式从数据库中查询。可以使用 HQL 查询具有继承、多态和关联关系的数据。在检索数据时应优先考虑使用 HQL 方式。 HQL 基础 1.1.1 默认数据库表和数据 在 Hibernate 中,HQL 查询可以指定默认数据库表和数据。例如,在查询用户表时,可以使用 `from User` 查询所有用户信息。 1.1.2 检索类的所有对象 HQL 可以检索类的所有对象,例如,`from User` 将检索所有用户对象。 1.1.3 检索类的某几个属性 HQL 可以检索类的某几个属性,例如,`select name, age from User` 将检索用户的名称和年龄。 1.1.4 指定别名 HQL 可以指定别名,例如,`from User as u` 将指定 User 类的别名为 u。 1.1.5 where 条件子句 HQL 可以使用 where 条件子句,例如,`from User where age > 18` 将检索年龄大于 18 的用户。 1.1.6 使用 distinct 过滤掉重复值 HQL 可以使用 distinct 过滤掉重复值,例如,`select distinct name from User` 将检索用户的名称,并过滤掉重复值。 1.1.7 删除对象 HQL 可以删除对象,例如,`delete from User where id = 1` 将删除 id 为 1 的用户对象。 1.1.8 更新对象值 HQL 可以更新对象值,例如,`update User set age = 20 where id = 1` 将更新 id 为 1 的用户的年龄为 20。 1.1.9 查询计算属性值 HQL 可以查询计算属性值,例如,`select sum(age) from User` 将计算用户的年龄和。 1.1.10 使用函数 HQL 可以使用函数,例如,`select upper(name) from User` 将将用户的名称转换为大写。 1.1.11 between and 和 not between and 确定查询范围 HQL 可以使用 between and 和 not between and 确定查询范围,例如,`from User where age between 18 and 30` 将检索年龄在 18 到 30 之间的用户。 1.1.12 in 和 not in 确定查询集合 HQL 可以使用 in 和 not in 确定查询集合,例如,`from User where id in (1, 2, 3)` 将检索 id 在 1、2、3 中的用户。 1.1.13 like 进行模糊查询 HQL 可以使用 like 进行模糊查询,例如,`from User where name like '%admin%'` 将检索名称中包含 "admin" 的用户。 1.1.14 and 逻辑与 HQL 可以使用 and 逻辑与,例如,`from User where age > 18 and name like '%admin%'` 将检索年龄大于 18 且名称中包含 "admin" 的用户。 1.1.15 or 逻辑或 HQL 可以使用 or 逻辑或,例如,`from User where age > 18 or name like '%admin%'` 将检索年龄大于 18 或名称中包含 "admin" 的用户。 1.1.16 orderby 对结果进行排序 HQL 可以使用 orderby 对结果进行排序,例如,`from User orderby age desc` 将将用户按照年龄降序排序。 1.1.17 groupby 对记录进行分组 HQL 可以使用 groupby 对记录进行分组,例如,`from User groupby age` 将将用户按照年龄分组。 1.1.18 having 关键字 HQL 可以使用 having 关键字,例如,`from User groupby age having count(age) > 1` 将将用户按照年龄分组,并选取每组的记录数大于 1 的组。 1.1.19 聚集函数 HQL 可以使用聚集函数,例如,`select sum(age) from User` 将计算用户的年龄和。 HQL 进阶 1.2.1 查询类及其所有继承的类的实例 HQL 可以查询类及其所有继承的类的实例,例如,`from Animal` 将检索 Animal 类及其所有继承的类的实例。 1.2.2 限制每次查询的返回对象数 HQL 可以限制每次查询的返回对象数,例如,`from User limit 10` 将检索前 10 个用户对象。 1.2.3 绑定参数 HQL 可以绑定参数,例如,`from User where age > :age` 将检索年龄大于绑定的参数的用户。 1.2.4 在映射文件配置 HQL 语句 HQL 可以在映射文件中配置 HQL 语句,例如,`<query name="findUser">from User</query>` 将在映射文件中配置了一个名为 findUser 的 HQL 语句。 HQL 的嵌套子查询 1.3.1 嵌套子查询的概念 HQL 可以使用嵌套子查询,例如,`from User where age > (select avg(age) from User)` 将检索年龄大于平均年龄的用户。 1.3.2 带有 IN 谓词的子查询 HQL 可以使用带有 IN 谓词的子查询,例如,`from User where id in (select id from User where age > 18)` 将检索 id 在年龄大于 18 的用户 id 集合中的用户。 1.3.3 比较子查询 HQL 可以使用比较子查询,例如,`from User where age > (select max(age) from User)` 将检索年龄大于最大年龄的用户。 1.3.4 带有 ANY 或 ALL 的子查询 HQL 可以使用带有 ANY 或 ALL 的子查询,例如,`from User where age > any (select age from User where age > 18)` 将检索年龄大于任何一个年龄大于 18 的用户的年龄。 HQL 的多表查询 1.4.1 表之间的关联关系 HQL 可以查询表之间的关联关系,例如,`from User u, u.order o` 将检索用户和订单的关联关系。 1.4.2 表中的数据 HQL 可以查询表中的数据,例如,`from User u, u.order o where o.total > 100` 将检索用户和订单的关联关系,并选取总金额大于 100 的订单。 1.4.3 修改持久化类 HQL 可以修改持久化类,例如,`update User set age = 20 where id = 1` 将更新 id 为 1 的用户的年龄为 20。 1.4.4 在映射文件中加入关联信息 HQL 可以在映射文件中加入关联信息,例如,`<many-to-one name="order" class="Order" column="order_id">` 将在映射文件中加入了用户和订单的关联信息。 1.4.5 左外连接 HQL 可以使用左外连接,例如,`from User u left outer join u.order o` 将检索用户和订单的左外连接关系。 1.4.6 左外抓取连接 HQL 可以使用左外抓取连接,例如,`from User u left fetch join u.order o` 将检索用户和订单的左外抓取连接关系。 1.4.7 右外连接 HQL 可以使用右外连接,例如,`from User u right outer join u.order o` 将检索用户和订单的右外连接关系。 1.4.8 内连接 HQL 可以使用内连接,例如,`from User u inner join u.order o` 将检索用户和订单的内连接关系。 1.4.9 抓取内连接 HQL 可以使用抓取内连接,例如,`from User u inner fetch join u.order o` 将检索用户和订单的抓取内连接关系。