码迷,mamicode.com
首页 > 其他好文 > 详细

QBC查询

时间:2017-08-07 18:31:20      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:技术   black   count   hiberna   ble   完成   value   soft   obj   

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

   

   

   

   

   

   

   

   

QBC 查询

   

   

1、QBC,即 Query By Criteria,它是 Hibernate 提供

的另一种查询方式

   

   

   

2、使用 HQL 查询需要写 hql 语句,但使用 QBC 查询

不需要写语句,直接使用方法实现

   

   

   

3QBC 操作的是实体类属性

   

   

   

4、使用 Criteria 对象实现 QBC 查询

   

   

   

   

   

基本查询

   

   

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

   

   

1、查询所有记录

   

1)创建 Criteria 对象

   

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

   

   

   

2、具体实现

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

   

   

   

   

   

条件查询

   

   

1、具体实现

   

1)多条件查询

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

* (2) 使用 criteria 的方法设置条件

*

* 调用 criteria add() 方法,设置条件值,

* 类似于 HQL where cid=? and custName=?

*/

criteria.add(Restrictions.eq("cid", 1));

criteria.add(Restrictions.eq("custName", "百度"));

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

   

   

2)模糊查询

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

* (2) 使用 criteria 的方法设置条件

*

* 调用 criteria add() 方法,设置条件值,

* 类似于 HQL where custName like ?

*/

criteria.add(Restrictions.like("custName", "%%"));

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

   

   

   

   

   

排序查询

   

   

1、具体实现

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

* (2) 设置对哪个属性进行排序以及排序规则

*/

criteria.addOrder(Order.asc("cid"));

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

   

   

   

   

   

分页查询

   

   

1、具体实现

   

技术分享

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

* (2) 设置分页数据

*

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

*/

criteria.setFirstResult(0);

criteria.setMaxResults(10);

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

 

/*

* 开始位置计算公式:(当前页 - 1) * 每页记录数

*/

   

   

   

   

   

统计查询

   

   

1、具体实现

   

技术分享

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 Criteria 对象

*

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

* 实体类的 class,返回值是 Criteria 类型,创建以

* 接收

*/

Criteria criteria=session.createCriteria(Customer.class);

 

/*

* (2) 设置操作

*/

criteria.setProjection(Projections.rowCount());

 

/*

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

*

* 调用 criteria uniqueResult() 方法,返回值是

* Object 类型,创建以接收

*/

Object obj=criteria.uniqueResult();

 

 

/*

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

* Long 类型

*

* Long val=(Long) obj;

* int valx=val.intValue();

*/

   

   

   

   

   

离线查询

   

   

1、离线查询

   

也称离线条件查询,可以脱离 Session 而对条件进行封装

   

   

   

2、应用场景

   

Servlet 调用 Service,Service 调用 DAO

   

   

一般情况下,参数往往是从 Web 层传到业务层,进而传到 DAO

层,最后在 DAO 层中拼接 SQL 完成查询

   

有了离线查询后,就可以直接在 Web 层将数据封装好,传到业务

层,进而传到 DAO 层完成查询

   

   

   

3、使用 DetachedCriteria 对象实现离线条件查询

   

   

   

4、具体实现

   

技术分享

   

技术分享

   

技术分享

   

   

/*

* (1) 创建 DetachedCriteria 对象(离线对象)

*

* 调用 DetachedCriteria forClass() 静态方法,

* 参数是实体类的 class,返回值是 DetachedCriteria

* 类型,创建以接收

*/

DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);

 

/*

* (2) 最终执行时才需要 Session

*

* 调用 detachedCriteria getExecutableCriteria()

* 方法,返回值是 Criteria 类型,创建以接收

*/

Criteria criteria=detachedCriteria.getExecutableCriteria(session);

 

/*

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

*

* 调用 criteria list() 方法,返回值是 List

* 型,创建以接收

*/

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

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

QBC查询

标签:技术   black   count   hiberna   ble   完成   value   soft   obj   

原文地址:http://www.cnblogs.com/siwuxie095/p/7300392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!