HQL(Hibernate Query Language)查询语句的基础用法

2024-05-21 21:18:26 浏览数 (4)

HQL介绍

HQL(Hibernate Query Language)是一种面向对象的查询语言,它是由Hibernate团队开发的。它与SQL类似,但是操作的是对象而不是关系数据库表中的记录。这意味着,使用HQL可以方便地对对象进行查询,而不必写复杂的SQL语句。

一些基本的HQL语法:

  • 从类中选择对象:SELECT c FROM Customer c
  • 查询类中的特定属性:SELECT c.name, c.email FROM Customer c
  • 在WHERE子句中使用比较运算符:SELECT c FROM Customer c WHERE c.age > 25
  • 使用AND和OR连接多个条件:SELECT c FROM Customer c WHERE c.age > 25 AND c.city = 'New York' OR c.country = 'USA'
  • 使用ORDER BY子句对结果进行排序:SELECT c FROM Customer c WHERE c.age > 25 ORDER BY c.name ASC, c.age DESC

HQL还提供了一些其他的功能,例如,可以使用GROUP BY和HAVING子句进行分组和过滤,也可以使用聚合函数(例如COUNT,MAX等)对查询结果进行统计。

动态sql

可以使用变量替换来构造复杂的查询语句。例如,假设我们有一个员工类,其中包含一个名字和一个部门属性。如果要根据用户输入的部门名称查询员工,可以使用下面的语句:

代码语言:javascript复制
String departmentName = "Sales";
String hql = "SELECT e FROM Employee e WHERE e.department = :departmentName";
Query query = entityManager.createQuery(hql);
// query.setString("departmentName", departmentName);
query.setParameter("departmentName", departmentName, StringType.INSTANCE);
List<Employee> employees = query.getResultList();

在这个例子中,我们使用了变量替换来构造HQL语句。我们在HQL语句中使用了一个名为departmentName的变量,并在执行查询时使用setString()setParameter()方法来设置变量的值。这样,我们就可以根据用户输入的部门名称查询员工了。

此外我们还可以按照参数位置来进行变量绑定。我们可以在HQL查询语句中 用 ? 来定义参数的位置,形式如下:

代码语言:javascript复制
String hql = "SELECT e FROM Employee e WHERE e.department = ?";

上面的HQL语句 定义了一个参数,参数的第一个位置为0,接下来调用Query的setXXX()方法来绑定参数.

代码语言:javascript复制
query.setString(0 , departmentName);

这样就可以完成按照参数位置进行变量绑定了。

特殊的绑定方式

setProperties() 方法

用于把参数名称与一个对象的属性值绑定,如:

代码语言:javascript复制
Customer c=new Customer();
c.setName("Tom"); 
c.setAge(20);

Query query =session.createQuery(" from Customer as c where c.name = :name and c.age = :age")
query.setProperties(c) ;

:name:age的值用Customer实例c替换。

需要注意的是,在使用变量替换构造HQL语句时,必须使用冒号(:)来标识变量的名称。

0 人点赞