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】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值