非常好的hibernate教程,简单明了。摘抄一部分,原文地址:http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
Hibernate Query Language (HQL) is an object-oriented query language, similar to SQL, but instead of operating on tables and columns, HQL works with persistent objects and their properties. HQL queries are translated by Hibernate into conventional SQL queries which in turns perform action on database.
Although you can use SQL statements directly with Hibernate using Native SQL but I would recommend to use HQL whenever possible to avoid database portability hassles, and to take advantage of Hibernate's SQL generation and caching strategies.
Keywords like SELECT , FROM and WHERE etc. are not case sensitive but properties like table and column names are case sensitive in HQL.
FROM Clause
You will use FROM clause if you want to load a complete persistent objects into memory. Following is the simple syntax of using FROM clause:
String hql = "FROM Employee";
Query query = session.createQuery(hql);
List results = query.list();
|
If you need to fully qualify a class name in HQL, just specify the package and class name as follows:
String hql = "FROM com.hibernatebook.criteria.Employee";
Query query = session.createQuery(hql);
List results = query.list();
|
AS Clause
The AS clause can be used to assign aliases to the classes in your HQL queries, specially when you have long queries. For instance, our previous simple example would be the following:
String hql = "FROM Employee AS E";
Query query = session.createQuery(hql);
List results = query.list();
|
The AS keyword is optional and you can also specify the alias directly after the class name, as follows:
String hql = "FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();
|
SELECT Clause
The SELECT clause provides more control over the result set than the from clause. If you want to obtain few properties of objects instead of the complete object, use the SELECT clause. Following is the simple syntax of using SELECT clause to get just first_name field of the Employee object:
String hql = "SELECT E.firstName FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();
|
It is notable here that Employee.firstName is a property of Employee object rather than a field of the EMPLOYEE table.
WHERE Clause
If you want to narrow the specific objects that are returned from storage, you use the WHERE clause. Following is the simple syntax of using WHERE clause:
String hql = "FROM Employee E WHERE E.id = 10";
Query query = session.createQuery(hql);
List results = query.list();
|
ORDER BY Clause
To sort your HQL query's results, you will need to use the ORDER BY clause. You can order the results by any property on the objects in the result set either ascending (ASC) or descending (DESC). Following is the simple syntax of using ORDER BY clause:
String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
Query query = session.createQuery(hql);
List results = query.list();
|
If you wanted to sort by more than one property, you would just add the additional properties to the end of the order by clause, separated by commas as follows:
String hql = "FROM Employee E WHERE E.id > 10 " +
"ORDER BY E.firstName DESC, E.salary DESC ";
Query query = session.createQuery(hql);
List results = query.list();
|
GROUP BY Clause
This clause lets Hibernate pull information from the database and group it based on a value of an attribute and, typically, use the result to include an aggregate value. Following is the simple syntax of using GROUP BY clause:
String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E " +
"GROUP BY E.firstName";
Query query = session.createQuery(hql);
List results = query.list();
|
Using Named Paramters
Hibernate supports named parameters in its HQL queries. This makes writing HQL queries that accept input from the user easy and you do not have to defend against SQL injection attacks. Following is the simple syntax of using named parameters:
String hql = "FROM Employee E WHERE E.id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("employee_id",10);
List results = query.list();
|
UPDATE Clause
Bulk updates are new to HQL with Hibernate 3, and deletes work differently in Hibernate 3 than they did in Hibernate 2. The Query interface now contains a method called executeUpdate() for executing HQL UPDATE or DELETE statements.
The UPDATE clause can be used to update one or more properties of an one or more objects. Following is the simple syntax of using UPDATE clause:
String hql = "UPDATE Employee set salary = :salary " +
"WHERE id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("salary", 1000);
query.setParameter("employee_id", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
|
DELETE Clause
The DELETE clause can be used to delete one or more objects. Following is the simple syntax of using DELETE clause:
String hql = "DELETE FROM Employee " +
"WHERE id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("employee_id", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
|
INSERT Clause
HQL supports INSERT INTO clause only where records can be inserted from one object to another object. Following is the simple syntax of using INSERT INTO clause:
String hql = "INSERT INTO Employee(firstName, lastName, salary)" +
"SELECT firstName, lastName, salary FROM old_employee";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
|
Aggregate Methods
HQL supports a range of aggregate methods, similar to SQL. They work the same way in HQL as in SQL and following is the list of the available functions:
S.N.
Functions
Description
1 |
avg(property name) |
The average of a property's value |
2 |
count(property name or *) |
The number of times a property occurs in the results |
3 |
max(property name) |
The maximum value of the property values |
4 |
min(property name) |
The minimum value of the property values |
5 |
sum(property name) |
The sum total of the property values |
The distinct keyword only counts the unique values in the row set. The following query will return only unique count:
String hql = "SELECT count(distinct E.firstName) FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();
|
Pagination using Query
There are two methods of the Query interface for pagination.
S.N.
Method & Description
1 |
Query setFirstResult(int startPosition) This method takes an integer that represents the first row in your result set, starting with row 0. |
2 |
Query setMaxResults(int maxResult) This method tells Hibernate to retrieve a fixed number maxResults of objects. |
Using above two methods together, we can construct a paging component in our web or Swing application. Following is the example which you can extend to fetch 10 rows at a time:
String hql = "FROM Employee";
Query query = session.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(10);
List results = query.list();
|
分享到:
相关推荐
Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它是面向对象的,设计目的是让开发人员可以使用对象而不是数据库表进行查询,从而简化了与数据库交互的过程。HQL的...
Hibernate Query Language(HQL)是Hibernate官方推荐的查询语言,它是面向对象的,与SQL类似,但更加符合Java编程的思维。HQL使得开发者能够更方便地处理对象关系映射,而无需直接编写SQL语句。在使用HQL时,我们...
# Hibernate Query Language (HQL): An Object-Oriented Variant of SQL ## 一、引言 Hibernate 是一款流行的 Java 持久层框架,它极大地简化了对象与关系数据库之间的映射过程。Hibernate Query Language(简称 ...
**Hibernate Query Language(HQL)基础认识** Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它类似于SQL,但专为面向对象编程设计,使得开发者能够以类和对象的...
1. **HQL(Hibernate Query Language)** HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是对象而非表。例如,要获取所有用户,可以使用以下HQL语句: ```java Query query = session....
首先,让我们了解一下Hibernate中的HQL(Hibernate Query Language),它是Hibernate提供的面向对象的查询语言,类似于SQL,但更贴近于Java。在HQL中,我们可以方便地使用聚合函数进行数据处理。例如,如果你想要...
在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...
1. **使用HQL(Hibernate Query Language)** HQL是Hibernate特有的查询语言,类似于SQL,但更面向对象。查询所有数据的HQL语句如下: ```java Session session = sessionFactory.openSession(); Transaction ...
8. **查询**: Hibernate支持HQL(Hibernate Query Language)和 Criteria API,它们提供了面向对象的查询方式。另外,还可以使用原生的SQL查询并通过`@NamedNativeQuery`进行配置。 在这个"Spring4Hibernate5MVC...
Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...
6. **Criteria查询**:除了HQL(Hibernate Query Language)外,Hibernate还提供了Criteria API,一种类型安全的动态查询方式,可以根据条件构造查询。 7. **第二级缓存**:Hibernate支持二级缓存,通过插件如...
6. **HQL/JPQL(Hibernate Query Language/Java Persistence Query Language)**:这是Hibernate提供的查询语言,可以更方便地进行对象查询,类似于SQL但面向对象。 7. **映射文件(Mapping Files)**:虽然在...
Hibernate还为开发者提供了一系列工具,比如HQL(Hibernate Query Language)、Criteria API以及Query接口,这些工具可以用来执行数据查询和检索操作。HQL是类似于SQL的查询语言,但它是面向对象的,允许从类和对象...
Hibernate提供了丰富的API和配置选项,比如通过XML或注解定义实体类,配置数据源,使用HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language)进行复杂查询,以及事务管理和缓存策略等。...
Hibernate3引入了许多增强功能,如Criteria查询、HQL(Hibernate Query Language)以及对JPA(Java Persistence API)的支持,提供了更丰富的查询方式和更高的灵活性。 hibernate3.jar是主要的Hibernate库文件,...
- **查询(Querying)**:包括HQL(Hibernate Query Language)、Criteria API和JPQL(Java Persistence Query Language)等多种方式,提供灵活的数据检索能力。 掌握这些知识点并熟练运用,可以让你在Hibernate...
本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...
Hibernate提供了HQL(Hibernate Query Language)和Criteria API两种查询方式,它们都是面向对象的,易于理解和使用,且支持复杂的查询条件。 7. 实战应用: 详细介绍如何在实际项目中集成Hibernate,包括配置...
3. **HQL和SQL查询编辑器**:提供了集成的HQL(Hibernate Query Language)和SQL查询编辑器,支持语法高亮、自动补全,以及对查询结果的可视化展示。 4. **JPA注解工具**:允许将传统的Hibernate映射文件转换为Java...