HQL查询

来源:互联网 发布:网络投资平台可靠吗 编辑:程序博客网 时间:2024/05/29 04:15

--------------------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】