QBC查询

摘要:
andcustName=?

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

QBC 查询

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

的另一种查询方式

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

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

3、QBC操作的是实体类和属性

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

基本查询

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

1、查询所有记录

(1)创建 Criteria 对象

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

2、具体实现

QBC查询第1张

/*

* (1) 创建Criteria 对象

*

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

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

* 接收

*/

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

/*

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

*

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

* 型,创建以接收

*/

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

条件查询

1、具体实现

(1)多条件查询

QBC查询第2张

QBC查询第3张

QBC查询第4张

/*

* (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)模糊查询

QBC查询第5张

QBC查询第6张

QBC查询第7张

/*

* (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、具体实现

QBC查询第8张

QBC查询第9张

QBC查询第10张

/*

* (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、具体实现

QBC查询第11张

QBC查询第12张

QBC查询第13张

QBC查询第14张

/*

* (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、具体实现

QBC查询第15张

QBC查询第16张

QBC查询第17张

QBC查询第18张

/*

* (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、具体实现

QBC查询第19张

QBC查询第20张

QBC查询第21张

/*

* (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查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Charles对iPhone进行Http(s)请求拦截(抓包)win8 Pro 64位在 UEFI模式下Ghost系统 备份 恢复下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

共享文件夹切换用户、局域网共享切换用户的方法

在局域网访问共享文件时,有时候我们需要切换访问用户,便于获得对共享文件访问的不同权限。但是,由于windows操作系统为了方便用户访问共享,提供了用户信息和共享会话记忆功能,使得当用户访问共享文件时,会自动按照用户以前访问共享时的账号密码自动通过验证,而无需再次输入账号密码。这样,当用户想切换用户访问共享文件时常常就比较麻烦。 本文提供了两种方法,可以参考...

hive函数之~字符串函数

1、字符串长度函数:length 语法: length(string A)返回值: int说明:返回字符串A的长度 hive> selectlength('abcedfg') fromtableName; 7 2、字符串反转函数:reverse 语法: reverse(string A)返回值: string说明:返回字符串A的反转结果 h...

php中处理换一换的简单实例

微博中,有很多标签供用户选择,点击换一换的时候,都会不断切换。 php程序的简单实现如下: //查询所有标签 $labels = Labels::find()->setColumns('id,w_name,w_uid')->order('w_time desc')->group('w_name')->getAll(); $label...

SQLAlchemy技术文档(中文版)-上

转自:http://www.cnblogs.com/iwangzc/p/4112078.html 1.版本检查 import sqlalchemy sqlalchemy.__version__ 2.连接 from sqlalchemy import create_engine engine = create_engine('sqlite:///:mem...

解决 XMLHttpRequest status = 0 问题 及 返回值为null问题

1.XMLHttpRequest status = 0 问题 XMLHttpRequest的说明:http://www.w3.org/TR/XMLHttpRequest/ 。 The status attribute must return the result of running these steps: status的值一定会返回运行这些步骤的结果。...

使用 MYSQLBINLOG 来恢复数据。

今天在家里做了一下试验,终于搞明白了以前做复制的时候没有搞明白的问题。原来BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储罢了。 1、配置文件里要写的东西: [mysqld] log-bin=yueliangdao_binglog(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名)重新启动M...