Fork me on GitHub

HQL查询

--------------------siwuxie095

   

   

   

   

   

   

   

HQL 查询

   

   

1、HQL,即 Hibernate Query Language,它是 Hibernate 提供

的一种查询语言

   

   

   

2、HQL 和 SQL 很相似,区别在于:

   

1HQL 操作的是实体类属性

   

2SQL 操作的是和表中字段

   

   

   

3、常用的 hql 语句

   

(1)基本查询: from 实体类名

   

(2)条件查询: from 实体类名 where 属性名 = ?

   

(3)排序查询: from 实体类名 order by 属性名 asc/desc

   

   

   

4、使用 Query 对象实现 HQL 查询

   

1)创建 Query 对象,写 hql 语句

   

2)调用 Query 对象的方法得到结果

   

   

   

   

   

基本查询

   

   

以客户和联系人为例(一对多),下同

   

   

1、查询所有记录

   

1)创建 Query 对象,写 hql 语句

   

2)调用 Query 对象的方法得到结果

   

   

   

2、查询所有的 hql 语句写法:from 实体类名

   

   

   

3、具体实现

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*/

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

 

/*

* (2) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Customer> list=query.list();

   

   

   

   

   

条件查询

   

   

1、条件查询的 hql 语句写法

   

(1)from 实体类名 where 属性名=? and 属性名=?

   

2from 实体类名 where 属性名 like ?

   

   

   

2、具体实现

   

1)多条件查询

   

   

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*

* hql 语句也可写作(as 可以省略):

* from Customer as c where c.cid=? and c.custName=?

*/

Query query=session.createQuery("from Customer where cid=? and custName=?");

 

/*

* (2) 设置条件

*

* 向占位符 ? 中设置值

*

* 调用 query setParameter() 方法

*

* JDBC 不同,这里的参数位置从 0 开始

*/

query.setParameter(0, 1);

query.setParameter(1, "百度");

 

 

/*

* (3) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Customer> list=query.list();

   

   

2)模糊查询

   

   

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*

* hql 语句也可写作(as 可以省略):

* from Customer as c where c.custName like ?

*/

Query query=session.createQuery("from Customer where custName like ?");

 

/*

* (2) 设置条件

*

* 向占位符 ? 中设置值

*

* 调用 query setParameter() 方法

*

* JDBC 不同,这里的参数位置从 0 开始

*/

query.setParameter(0, "%%");

 

/*

* (3) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Customer> list=query.list();

   

   

   

   

   

排序查询

   

   

1、排序查询的 hql 语句写法

   

from 实体类名 order by 属性名 asc/desc

   

   

   

2、具体实现

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*/

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

 

/*

* (2) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Customer> list=query.list();

   

   

   

   

   

分页查询

   

   

1、MySQL 实现分页查询

   

sql 语句中使用 limit 关键字

   

如:select * from t_customer limit 1,3

   

   

   

2、HQL 实现分页查询

   

1)在 hql 语句中不能写 limit

   

2)Hibernate 的 Query 对象中封装了两个方法可以实现分页操作

   

   

   

3、具体实现

   

   

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*/

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

 

/*

* (2) 设置分页数据

*

* 开始位置和每页的记录数

*/

query.setFirstResult(0);

query.setMaxResults(10);

 

/*

* (3) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Customer> list=query.list();

   

   

   

   

   

投影查询

   

   

1、投影查询:查询部分字段的值,而不是所有字段的值

   

   

   

2、投影查询的 hql 语句写法

   

select 属性名1, 属性名2 from 实体类名

   

注意:select 后面不能写 *,即 不支持

   

   

   

3、具体实现

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*/

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

 

/*

* (2) 调用方法得到结果

*

* 调用 query list() 方法,返回值是 List 类型,

* 创建以接收

*/

List<Object> list=query.list();

   

   

   

   

   

统计查询

   

   

1、常用的聚集函数:countsumavgmaxmin

   

   

   

2、统计查询的 hql 语句写法

   

select 聚集函数(*) from 实体类名

   

   

   

3、具体实现

   

   

   

   

/*

* (1) 创建 Query 对象

*

* 调用 session createQuery() 方法,参数是 hql

* 语句,返回值是 Query 类型,创建以接收

*/

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

 

/*

* (2) 调用方法得到结果

*

* 调用 query uniqueResult() 方法,返回值是 Object 类型,

* 创建以接收

*/

Object obj=query.uniqueResult();

 

/*

* 注意:不能直接把 obj 转成 int 类型,需要先转成 Long 类型

*

* Long val=(Long) obj;

* int valx=val.intValue();

*/

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

posted on 2017-08-07 17:33  siwuxie095  阅读(256)  评论(0编辑  收藏  举报

导航