HQL详解

一、HQL介绍

HQL(Hibernate Query Language)描写对象操作的一种查询语言,是Hibernate特有的。与SQL语法基本一致,不同的是HQL是面向对象的查询,查询的是对象和对象中的属性。HQL的关键字不区分大小写,但类名和属性名区分大小写。

语法示例:

        SELECT    别名/属性名/表达式

        FROM     实体  AS  别名

        WHERE   过滤条件

        GROUP BY     分组条件

        HAVING         分组后结果的过滤条件

        ORDER BY      排序条件

二、HQL的使用

1、查询所有的客户

Query query = session.createQuery("from com.zju.model.Customer");

List allCustomer = query.list();

2、选择查询

Query query = session.createQuery("select c from Customer as c where c.cid = 1");

3、投影查询

在选择查询的基础上,将查询的结果封装到对象中

Query query = session.createQuery("select new Customer(c.cid , c.cname) from Customer c");

List allCustomer = query.list();

4、排序

Query query = session.createQuery("from Customer order by cid desc");

List allCustomer = query.list();

5、分页

Query query = session.createQuery("from Customer");

query.setFirstResult(0);    //从哪个索引开始查询,包括索引本身的记录  startIndex = (pageNum - 1)*pageSize

query.setMaxResults(2);   //每页显示个数 pageSize

6、绑定参数

方式一:占位符,使用?,在hql语句中替换具体的参数

Query query = session.createQuery("select c from Customer where cid = ?");

query.setInteger(0,cid);  //参数1:?位置,从0开始   参数2:实际参数

方式二:别名,格式:“属性 = :别名”

Query query = session.createQuery("select c from Customer where cid = :xxx");

query.setParameter("xxx", cid);   //参数1:别名    参数2:实际参数

7、聚合函数和分组

聚合:count、avg、sum、max、min....

分组:group by ... having...

//查询每个客户下订单的数量

Query query = session.createQuery("select o.Customer , count(o) from Order o group by o.Customer"); 

8、连接查询

连接查询主要有:内连接、迫切内连接、隐式内连接、做外连接、迫切左外连接、右外连接、交叉连接。下面举例说明几个常用的:

//左外连接

List list = session.createQuery("from Cusstomer c left outer join c.orderSet").list();

//迫切左外连接(默认数据重复)

List list = session.createQuery("from Cusstomer c left outer join fetch c.orderSet").list();

//迫切左外连接(去重复)

List list = session.createQuery("select distinct c from Cusstomer c left outer join c.orderSet").list();


你可能感兴趣的:(Hibernate)