Hibernate HQL 教程:基础知识、进阶技术和多表查询
需积分: 9 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` 将检索用户和订单的抓取内连接关系。
2009-05-25 上传
2022-09-24 上传
2007-04-25 上传
2021-07-19 上传
126 浏览量
2021-03-05 上传
2021-10-02 上传
2014-03-05 上传
2008-12-04 上传
qw767972765
- 粉丝: 0
- 资源: 1
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫