HQL定义:Hibernate Query Language。是Hibernate框架提供的一种查询语言。HQL是面向对象的查询语言,其查询的主体是映射配置的持久化类及其属性。(注:SQL不是面向对象的查询语言,其主体是数据库表及表的字段)
实际上,hibernate框架会将编写好的HQL语句解析成相应的sql语句来完成最终的数据库查询操作。
HQL查询丰富灵活,是hibernate官方推荐的查询方式。
HQL语句形式:
- select:指定查询结果中的对象和属性,并指定以何种数据类型返回。其位置在HQL语句结果中最前面。
- from(不可或缺):指定HQL语句查询目标(即映射配置的持久化类及其属性)
- where:逻辑表达式,设置查询的条件,限制返回的查询结果和范围
- group by:分组查询子句
- having:对分组进行条件限制设置
- order by:指定查询结果中的实例对象的排序
注意的问题:
1、HQL是面向对象的查询语言,查询主体是持久化类及其属性,对Java类名与属性名大小写敏感。(sql查询主体是数据库表及其字段,大小写不敏感)
2、HQL对关键字不区分大小写(习惯小写)。
Query接口: org.hibernate.Query接口。
1、在Query中定义有执行查询的方法,该方法完成对HQL语句的解析和执行过程,并返回查询的结果。(如同JDBC接口解析sql语句)
过程: Hibernate框架解析HQL查询语句,根据映射配置信息,把HQL查询语句解析成相应的SQL语句来执行数据库的查询操作,此过程依靠的就是Query接口。
2、Query接口支持方法链的编程风格,使得程序代码更简洁。在Query接口中,使用方法链编程最多的场景是查询参数的动态设置,特别是多个参数的设置。
方法链编程:就是调用方法后,返回的方法结果还是调用方法的这个对象,可以在调用方法后直接调用该对象的其他方法。这样用一条程序语句来完成多个方法的调用和执行。
Query实例的创建:
通过Session接口的createQuery()方法创建Query实例对象。同时createQuery()方法包含一个HQL查询语句参数,createQuery(hql)。
创建好一个包含HQL查询语句的Query实例对象之后,执行查询。
Query执行查询:
Query接口的list()方法执行HQL查询,这个方法会解析Query对象传入的hql语句。list()方法在HQL查询完成之后返回结果数据类型为java.util.List,List集合中存放符合查询条件的持久化对象。
例:在数据库创建表seller,创建映射配置文件Seller.hbm.xml,创建工具类HibernateSessionFactory。
测试类SellerTest:
package com.model;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.util.HibernateSessionFactory;
public class SellerTest {
private Session session=null;
@Test
public void testSeller(){
//编写执行查询的HQL语句
String hql="from Seller";
//创建Query实例对象
Query query =session.createQuery(hql);//参数是编写的hql语句
//调用Query实例对象的list方法来执行HQL查询,这个方法会解析Query对象传入的hql语句
List<Seller> sellers=query.list(); //查询结果是List集合
for (Seller seller : sellers) {
//toString()在工具类中进行了重写,用于测试
System.out.println(seller.toString());
}
}
@Before
public void setUp() throws Exception{
session=HibernateSessionFactory.getCurrentSession();
}
@After
public void teardown() throws Exception{
session.close();
}
}
Junit单元测试,控制台: