HQL是Hibernate自带的查询语言
HQL是一种面向对象的查询语言。SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类、实例、属性等。
HQL的语法很像SQL的语法
以下举例均以学生类为例:Students.java
private String name;
private int age;
public Students(){
}
public Students(String name,int age){
name = this.name;
age = this.age;
}
//get/set方法
//。。。。
1.from子句
规则: from + 持久化类的类名
//Students 是学生类,直接这么写就可以查询出Students持久化类对应于数据库表中的所有信息
//select可以省略.
String hql = "from Students";
String hql = "from Students as s";//使用别名
String hql = "from Students s";//别名可以省略
Query query = getCurrentSession().createQuery(hql);
//注意:当省略select子句时,直接使用from子句来查询全部,query.list()返回的是该持久化类型的List
List<Students> studentsList = query.list();
2.select子句
规则:select + 持久化类中属性名(可以多个或一个) + from子句。。。
//hql中不可以写 select * 这个实际上是相当于 form Students
hql = "select s from Students as s";//相当于 from Students
hql = "select s.name from Students as s";//只查询一列,返回List<Object>
hql = "select s.name,s.age from Students as s";//查询多列,返回List<Object[]>
hql = "select new Students(s.name,s.age) from Students as s"//自定义返回类型,返回List<Students>,同时在Students.java持久化类中要有相应的构造器和无参构造器
hql = "select distinct s.name from Students s"//distinct关键字,返回List<Object>
下面说一下Select子句的不同返回类型
①Object[]----默认的
②以List
③以map
④自定义
⑤distinct关键字
//默认的List<Object[]> 返回,此时需要查询多个属性,一个属性的查询返回的是List<Object>
hql = "select s.name,s.age from Students s";
List<Object[]> list = query.list();
//查询一个属性
hql = "select s.name from Students s";
List<Object> list = query.list();
//以list返回
hql = "select new List (s.name,s.age) from Students s";
List<List> list = query.list();
//以map返回:如果查询字段属性不设别名则key值以序号显示,查询属性使用别名,key值以别名显示
hql = "select new map(name,age) from Students";
List<Map> list = query.list();
list.get(0).get("0");//没有别名时,key以序号命名
hql = "select new map(s.name,s.age) from Students s";
list.get(0).get("name");//通过别名来获取
//以自定义的构造器返回:持久化类中必须声明了该构造器和无参构造器
hql = "select new Students(s.name,s.age) from Students s";
List<Students> list = query.list();
//以distinct关键字返回
hql = "select distinct s.name from Students s";
List<Object> list = query.list();//因为是一个字段所有返回List<Object>
3.where子句
首先说一下Query两种参数传递方式
①使用‘?’占位
hql = "from Students where name = ? ";
Query query = getCurrentSession().createQuery(hql);
query.setParameter(0,"张三",Hibernate.STRING);
//第一个参数:表示是第几个'?',从0开始
//第二个参数:表示实际查询的内容
//第三个参数:表示该参数的类型(可以省略)
②使用变量名
hql = "from Students where name = :NAME ";
Query query = getCurrentSession().createQuery(hql);
query.setParameter("NAME","张三",Hibernate.STRING);
//第一个参数:与hql中':'后的变量名对应
//第二个参数:表示实际查询的内容
//第三个参数:表示该参数的类型(可以省略)
//当参数是集合时,一定要使用setParameterList()设置参数值
hql = "from Students s where name in (:NAME)";
Query query = getCurrentSession().createQuery(hql);
query.setParameterList("NAME", new Object[] { "张三","李四"});
下面是where子句中的应用(因为跟sql类似就不举例)
①比较运算
= <> < > <= >=
null值判断:is null is not null
HQL中可以写 x = null; / x <> null; 会自动转换成相应sql
②范围运算
in() / not in()
between 值1 and 值2
③字符串匹配
like关键字
通配符:"%"---任意字符
"_"---一个字符
④逻辑运算
and or not
⑤集合运算
is empty /is not empty
member of
⑥四则运算
+ - * /
4.order by子句
同sql:对查询结果排序
desc:降序
esc:升序(默认)
5.分组: Group By ... Having
在having子句中不能使用列别名
在orderby子句中可以使用列别名
hql = "select s.name,count(s.age) from Students s where s.age > 10 group by s.name having count(s.age) > 1 order by s.age";
6.聚集函数
count(), max(), min(), avg(), sum()
7.查询单个对象
hql = "from Students where name = '"张三"'";
Query query = session.createQuery(hql);
Students student = query.uniqueResult();
//当查询结果不唯一时,会抛出异常。
8.连接查询
分享到:
相关推荐
HQL支持SQL的连接查询,包括内连接、左外连接、右外连接和全连接(不常用)。例如,使用内连接: ```java select a.id, b.id from A a inner join B b on a.id = b.id ``` 等价于SQL中的`INNER JOIN`。查询结果通常...
这些关键字与SQL中的用法类似,但HQL中的对象和属性是基于Java类和它们的成员。 例如,假设我们有一个`Student`类,包含`name`和`age`属性,一个简单的HQL查询可能如下: ```sql SELECT s FROM Student s WHERE s....
在HQL中,我们可以使用`like`关键字来进行模糊查询。`like`关键字后面可以跟一个包含通配符的字符串。常见的通配符有: - `%`:代表零个、一个或多个任意字符。 - `_`:代表一个任意字符。 例如,如果我们有一个`...
以上就是关于Hibernate常用jar包的一些介绍,每个库都有其独特的功能,共同构成了Hibernate的强大ORM框架。理解并熟练掌握这些库的用途,对于有效地利用Hibernate进行开发至关重要。在实际项目中,开发者还需要根据...
以下是对标题、描述中提到的Hibernate常用jar包的详细解释: 1. **antlr-2.7.6**: ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。...
"hibernate 常用核心包"包含了 Hibernate 框架中必要的组件,使得开发者可以进行基本的数据库操作和应用程序开发。 在 Hibernate 中,以下几个核心包是至关重要的: 1. **hibernate-core**: 这是 Hibernate 的核心...
HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的...
在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用场景。 #### 一、find(String ...
6. 集合类映射:在Java中集合是常用的,Hibernate支持集合类的映射,这部分将解释如何映射List、Set、Map等集合类型。 7. 组件映射:当一个类的属性是由其他几个类的属性组合而成时,可以使用组件映射。这部分内容...
这个压缩包“hibernate3.5.5常用jar包搜集”包含了用于使用Hibernate 3.5.5版本进行开发所需的库文件。 在Hibernate 3.5.5中,主要的jar包包括以下几类: 1. **Hibernate Core**:这是Hibernate的核心库,包含ORM...
在这个“hibernate 3.5.5 常用jar包”中,包含了运行和开发基于Hibernate 3.5.5应用所需的核心库。以下是关于Hibernate 3.5.5及其相关jar包的关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为...
下面将详细介绍HQL在实际开发中常用的几种用法。 #### 1. 基本查询 - **全表查询**:`String hql = "from User";` 这条语句用于查询User表中的所有记录。 - **条件查询**:如`String hql = "from User where ...
HQL是一种面向对象的查询语言,用于在Hibernate框架中执行数据检索任务。它允许开发人员以一种接近Java语言的方式进行数据库操作,从而简化了数据访问层的复杂度。 ### 1. from子句 `from`子句是HQL语句的基础,...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了与数据库之间的交互。`HibernateSessionFactory` 类是Hibernate应用中常见的一个工具类,用于管理和提供与当前线程相关的Session实例。让...
以下是一些常用HQL语句的使用与说明: 1. **HQL更新语句**: 更新操作允许您修改数据库中的对象属性。在示例中,第4行的HQL语句`update PhUser set realName=?`用于更新`PhUser`表中所有记录的`realName`字段。第5...
实体查询是HQL中最常用的操作之一。例如: ```java String hql = "from User user"; List list = session.createQuery(hql).list(); ``` 此查询将返回所有`User`实体对象组成的列表。值得注意的是,Hibernate支持...
HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内制的聚集函数,sum(),min(),max...
还有左外连接(`left outer join`)、右外连接(`right outer join`)和全连接(`full join`),但全连接在HQL中并不常用。简写形式如`join`和`left join`可用于内连接和左外连接。`fetch`连接允许在查询中初始化相...
- 这里假设`bean.User`是HQL中的实体类名称,查询结果为所有`User`对象的列表。 2. **find(String queryString, Object value)**:此方法接受一个HQL字符串及一个值作为参数,返回符合条件的结果列表。 - 示例...
下面我们将详细探讨Hibernate常用JAR包及其作用。 1. **hibernate-core.jar**:这是Hibernate的核心库,包含了主要的ORM功能,包括实体管理、持久化操作、事务管理和查询服务。它提供了对Hibernate Session和...