HQL与Criteria查询对比分析
需积分: 8 85 浏览量
更新于2024-09-17
1
收藏 49KB PDF 举报
“HQL与Criteria对照”
在Java的持久化框架Hibernate中,HQL(Hibernate Query Language)和Criteria API是两种主要的查询方式。虽然Criteria查询提供了面向对象的封装,更符合程序员的思维习惯,但HQL由于其丰富的查询功能和灵活性,被Hibernate官方推荐为标准查询方式。HQL不仅涵盖了Criteria的所有功能,还允许用户以类似SQL的语法进行查询,同时保持了面向对象的特性。
HQL的基本结构包括:Select, Update, Delete子句,以及from, where, group by, having, order by等部分。Update和Delete是Hibernate 3新增的功能,使得HQL更加全面,几乎与SQL查询无异。以下是对这两种查询方式的详细比较:
1. 查询所有对象
- HQL:`String hql = "from Employee";`
- Criteria:`List<Employee> result = session.createCriteria(Employee.class).list();`
2. 条件过滤
- HQL 支持等价(=)、不等(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等操作:
```java
String hql = "from Employee e where e.age = :age";
List<Employee> result = session.createQuery(hql).setInteger("age", age).list();
```
- Criteria 使用Restrictions类的方法实现相同功能:
```java
List<Employee> result = session.createCriteria(Employee.class)
.add(Restrictions.eq("age", age)) // 等价
// .add(Restrictions.ne("age", age)) // 不等
// .add(Restrictions.gt("age", age)) // 大于
// .add(Restrictions.ge("age", age)) // 大于等于
// .add(Restrictions.lt("age", age)) // 小于
// .add(Restrictions.le("age", age)) // 小于等于
.list();
```
3. 范围查询(between and)
- HQL:
```java
String hql = "from Employee e where e.age between :fromAge and :toAge";
List<Employee> result = session.createQuery(hql)
.setInteger("fromAge", fromAge)
.setInteger("toAge", toAge)
.list();
```
- Criteria:
```java
List<Employee> result = session.createCriteria(Employee.class)
.add(Restrictions.between("age", fromAge, toAge))
.list();
```
4. 忽略大小写的条件过滤(iLike, notILike)
- 在HQL中,我们可以使用`like`和`not like`配合`lower()`或`upper()`函数来实现忽略大小写的过滤:
```java
String hql = "from Employee e where lower(e.name) like :name";
List<Employee> result = session.createQuery(hql)
.setParameter("name", name.toLowerCase() + "%")
.list();
```
- Criteria中,可以使用`Restrictions.ilike()`方法:
```java
List<Employee> result = session.createCriteria(Employee.class)
.add(Restrictions.ilike("name", name + "%"))
.list();
```
5. 其他高级特性
- HQL支持更复杂的查询,如联接(join)、子查询(subquery)、集合操作(in, not in)等。
- Criteria API也提供相应的API,如`createAlias()`, `createCriteria()`, `add(Subqueries.propertyIn("property", subquery))`等,可以构建复杂的查询条件。
综合来看,HQL和Criteria各有优势。HQL更接近SQL,对于熟悉SQL的开发者来说上手更快,而Criteria则提供了更面向对象的查询方式,更易于在代码中动态构建查询条件。在实际开发中,开发者可以根据项目需求和个人偏好选择适合的查询方式。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-03-03 上传
2016-01-02 上传
点击了解资源详情
点击了解资源详情
2024-11-30 上传
2024-11-30 上传
2024-11-30 上传
hay_lee
- 粉丝: 168
- 资源: 47
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践