HQL语句查询学习笔记
???? Hibernate的几种主要检索方式:HQL检索方式、QBC检索方式、SQL检索方式。HQL是Hibernate Query Language的缩写,是官方推荐的查询语言。QBC是Query By Criteria的缩写,是Hibernate提供的一个查询接口。Hibernate是一个轻量级的框架,它允许使用原始SQL语句查询数据库。
??? HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询。可以使用HQL查询具有继承、多态和关联关系的数据。在检索数据时应优先考虑使用HQL方式。
?检索类的所有对象???? session.createQuery()以HQL查询语句为参数,生成一个查询对象。本例中的HQL语句为“from Student”,这是from子句,格式如下。
???? HQL关键字不区分大小写,FROM、from和From是一样的。
???? 属性查询使用select关键字,属性查询的格式如下。
???? 属性前可以加上类名加以限定,如:
???? 查询结果将只显示查询的属性列。
???? 属性查询的结果,对于用it.next()获得的每条记录,可以存储在Object[]数组中,以便进行存取。
?指定别名在查询时,可以用关键字as指定查询的别名,指定别名可以简化查询,有时必需指定别名才能进行查询。以下代码查询学号中含有4的学生的姓名和所在系。
select s.sname,s.sdept from Student as s where s.sno like '%4%'from Student s
s就是类Student的别名。注意as可以省略,即下面的查询语句和上面的语句是等效的。
select s.sname,s.sdept from Student s where s.sno like '%4%'from Student s
?where条件子句where条件子句跟SQL中的where条件子句类似,它检索符合条件的对象。例如,查询所有所在系别为计算机系的学生:
select s.sname,s.sdept from Student s where s.dept=’计算机’
???? where子句指定查询的条件,其语法和SQL类似。
???? 在where子句中可以指定比较运算符:>、>=、<、<=、<>,其含义分别为大于、大于等于、小于、小于等于、不等于。
查询年龄在22到23岁的学生:
from Student s where s.sage>=22 and s.sage<=23
??? 在where子句中指定查询的属性是否为null:is null、is not null,其含义分别表示为空和不为空。
查询所在籍贯为空的学生:
from Student s where s.saddress is null
使用distinct过滤掉重复值使用distinct关键字将去掉结果中的重复值,只检索符合条件的对象。如下面的例子检索学生实例中的不重复的年龄。
??????? Session session=HibernateSessionFactory.currentSession();??????????? //创建Session
??????? String hql="select distinct s.sage from Student s";??????? ?????????? //HQL查询语句
??????? Query query=session.createQuery(hql);????????????????????? ????????????? //创建查询
??????? List list=query.list();?????????????????????????????????????? ???????????? //执行查询