HQL查询语句精要

需积分: 9 1 下载量 11 浏览量 更新于2024-09-14 收藏 47KB DOC 举报
“hql精点查询语句.doc” 在文档“hql精点查询语句.doc”中,主要探讨了Hibernate Query Language(HQL)的一些关键查询语句和功能。HQL是Hibernate提供的面向对象的查询语言,它允许开发者以类和属性的名字而不是数据库表和列来编写查询,使得SQL操作更加面向对象。 1. from子句 `from Person` 这个语句表示从`Person`持久化类中选择所有的实例。这是HQL的基本查询结构,用于指定要查询的对象。 2. select子句 - `select p.name from Person as p` 选择`Person`类中的`name`属性。 - `select p.name.firstName from Person as p` 获取`Person`类中嵌套属性`name.firstName`。 - `select new list(p.name, p.address) from Person as p` 创建一个包含`name`和`address`的新列表。 - `select new ClassTest(p.name, p.address) from Person as p` 如果`ClassTest`是可构造的,创建一个新的`ClassTest`实例,传入`name`和`address`。 - `select p.name as personName from Person as p` 使用别名`personName`引用`name`属性。 - `select new map(p.name as personName) from Person as p` 创建一个Map,其中键是`personName`,值是`name`。 3. 统计函数查询 - `count(*)` 统计查询结果的记录数,如`select count(*) from Student`计算`Student`类的实例数量。 - `min()` 求最小值,例如`select min(p.age) from Person as p`找出`Person`的最小年龄。 - `max()` 求最大值,如`select max(p.age) from Person as p`找到`Person`的最大年龄。 - `sum()` 求和,例如`select sum(p.age) from Person as p`计算所有`Person`的年龄之和。 - `avg()` 求平均值,如`select avg(s.age) from Student as s`获取`Student`的平均年龄。 4. 字符串处理 - `upper()` 方法可以将字符串转换为大写,如`select upper(s.name) from Student as s`。 5. 去除重复行 `distinct` 关键字用于去除查询结果中的重复项,如`select distinct s.age from Student as s`。 6. 多态查询 - `from Person` 和 `from java.lang.Object o` 表示可以从`Person`类或任何对象类型进行查询,体现HQL的多态特性。 - `from Named as n` 可能是针对具有特定接口或注解的类进行查询。 7. where子句 - `where name like "tom%"` 用于设置查询条件,这里查找名字以"tom"开头的所有`Person`实例。 - 更复杂的条件,如`from Cat cat where cat.mate.name like "kit%"`,可以在关联的对象上设置过滤条件,如`Cat`的伴侣(mate)名字以"kit"开头。 通过这些HQL查询语句,开发者可以高效、灵活地对对象数据进行检索、统计和操作,实现了与数据库的无缝对接,简化了数据库操作。理解并熟练掌握这些语句对于进行基于Hibernate的开发至关重要。