精通Hibernate查询:HQL与Criteria详解
需积分: 10 73 浏览量
更新于2024-08-23
收藏 392KB PPT 举报
"本章主要介绍了Hibernate查询语句的多种方式,包括HQL的连接查询、Criteria查询、HQL的关联查询(如左外连接)以及HQL的抓取策略。"
在Java持久化框架Hibernate中,查询是核心功能之一。本章主要关注的是如何有效地使用Hibernate Query Language (HQL) 和 Criteria API 进行数据检索。
1. **HQL关联查询**:HQL是Hibernate提供的面向对象的查询语言,它允许开发者以对象的方式书写查询语句。在关联查询中,可以处理对象之间的关系,例如在上面的例子中,通过`join`操作查询了项目(Prj)与其关联的参与人员(Emp)集合。使用`select emps, p.prjName from Prj p join p.joinedEmp emps order by p.prjName`这样的HQL语句,可以获取项目及其参与人的信息,并按项目名称排序。
2. **HQL左外连接**:HQL支持标准SQL的左外连接、右外连接和内连接,但不支持交叉连接。左外连接(Left Outer Join)确保返回所有左表(在例子中为Prj)的记录,即使在右表(joinedEmp)中没有匹配的记录。通过`right join`实现右外连接,未参与项目的员工会显示项目为null。
3. **HQL抓取策略**:为了优化性能,Hibernate引入了抓取策略(Eager Fetching)。默认情况下,关联对象通常使用延迟加载(Lazy Loading)。然而,通过在HQL查询中使用`fetch join`,可以强制立即加载关联对象,避免多次数据库访问。例如,`from Emp e join fetch e.joinedPrj where e.empName='钱学森'`将同时加载员工和其关联的项目。
4. **Criteria查询**:Criteria API提供了一种更面向对象的方式来执行数据库查询,它可以动态构建查询条件,无需直接编写HQL字符串。虽然在提供的内容中没有展示Criteria的具体使用,但在实际应用中,Criteria API可以方便地组合各种查询条件,比如按属性进行比较、范围查询等,提供了更安全且可维护的查询方式。
5. **HQL的灵活查询**:HQL支持复杂查询,例如在对象查询中,可以同时执行多项操作,如模糊查询、精确查询和范围查询。在给定的例子中,可能的HQL语句可能如下所示:
```java
session.createCriteria(TblFwxx.class)
.add(Restrictions.like("title", "%搜索关键词%"))
.add(Restrictions.eq("houseType", "特定房屋类型"))
.add(Restrictions.between("rentalPrice", 租金下限, 租金上限))
.list();
```
这样的查询能根据标题、房屋类型和租金范围筛选出满足条件的记录。
理解并熟练运用这些查询技术,对于高效、灵活地操作Hibernate中的数据至关重要。无论是简单的单表查询还是复杂的多表关联,HQL和Criteria API都能提供相应的解决方案,帮助开发者更好地适应不同的业务需求。
2008-04-30 上传
2008-01-11 上传
2007-08-05 上传
2007-08-05 上传
2007-08-05 上传
2009-05-16 上传
2009-05-16 上传
2008-06-04 上传
黄子衿
- 粉丝: 20
- 资源: 2万+
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析