一直习惯了Hibernate的HQL查询,一直也觉得挺方便,对于最近项目里出现的QBC(org.hibernate.Criteria接口)也是报着一种看看的心理,因为做j2ee这么久了,也写了一大堆HQL的工具类,起初的心理也只是看看而已
Session session =HibernateSessionFactory.currentSession();
首先从工厂类中获得一个Session,这个没什么好说的.用myeclipse的人都知道可以自动生成,以及从ThreadLocal内获取一个连接,这样可以防止lazy异常以及提高效率
下面就是主角了,现在假设有一个Student类,内有id,name,age属性
String hql = "from Student s";
按照以前的做法,我通常是
Query query = session.createQuery(hql);
或者要按照条件检索的话.
String hql = "from Student s where s.name like '王%'"
Query query = session.createQuery(hql);
不用HQL而使用QBC的话,那么代码为:
Criteria criteria =session.createCriteria(Student.class);
Criterion criterion = Expression.like("name","王%");
这样还看不出来.那我们把检索条件加上年龄为22.
HQL:
String hql = "from Student s where s.name like '王%' and s.age= 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Criteria criteria =session.createCriteria(Student.class);
Criterion criterion1 = Expression.like("name","王%");
或者“criteria.add(Restrictions.eq(propertyName, value))”
因为public final class Expression extends Restrictions
Criterion criterion2 = Expression.eq("age",newInteger(22));
criteria.add(criterion1).add(criterion2);
List list = criteria.list();
看上去烦琐很多.但是做过项目的人都知道,当一个模块业务逻辑发生改变的时候,往往要重写sql,最烦也是最讨厌的就是拿着别人的hql或者sql,两眼瞪的溜园找到底要修改什么地方呢?
如果使用QBC大大的增加了代码的可读性,以及可维护性.
需要注意的是null值
比如我们要查找姓名为null的Student对象时应该这么写
Criteria criteria =session.createCriteria(Student.class);
Criterion criterion = Expression.isNull("name");
criteria.add(criterion).list();
以及使用between...and的时候
Criteria criteria =session.createCriteria(Student.class);
Criterion criterion1 = Expression.ge("age",new Integer(20));//下限
Criterion criterion2 = Expression.le("age",new Integer(25));//上限
//这里也可以把上述两个条件添加到第三个条件里
Criterion criterion3 =Expression.and(criterion1,criterion2);
criteria.add(criterion3).list();
相当于from Student s where s.age between 20 and 25
等同于from Student s where s.age >= 20 and s.age <=25
下面是就HQL和QBC常用的查询条件做的比较
表达式含义
|
HQL
|
QBC
|
大于等于
|
>=
|
Expression.ge()
|
大于
|
>
|
Expression.gt()
|
小于等于
|
<=
|
Expression.le()
|
小于
|
<
|
Expression.lt()
|
等于
|
=
|
Expression.eq()
|
不等于
|
<> 或者!=
|
Expression.ne()
|
为空
|
is null
|
Expression.isNull()
|
不为空
|
is notnull
|
Expression.isNotNull()
|
在指定范围内
|
betweenand
|
Expression.between()
|
不在指定范围
|
not betweenand
|
Expression.not(Expression.between())
|
属于某个集合
|
in
|
Expression.in()
|
不属于某个集合
|
notin
|
Expression.not(Expression.in())
|
与
|
and
|
Expression.and()
|
或
|
or
|
Expression.or()
|
非
|
not
|
Expression.not()
|
模糊查询
|
like
|
Expression.like()
|
分享到:
相关推荐
#### 四、QBC检索方式 QBC(Query By Criteria)是一种基于API的检索方式,它允许开发者通过编程方式构建查询条件。QBC使用`Criteria`、`Criterion`和`Expression`接口来定义查询条件。 **特点**: - **灵活性**:...
QBC和QBE是Hibernate提供的两种不同类型的查询接口,旨在简化数据检索过程。 Query By Criteria(QBC)是一种基于对象的查询方式,它允许开发者通过构建Criteria对象来描述查询条件,然后由Hibernate自动转换为相应...
本篇将详细介绍如何使用Hibernate的Query By Criteria (QBC)方式进行分页查询。 首先,我们需要了解QBC的基本概念。QBC是Hibernate提供的一种基于对象的查询方式,与HQL(Hibernate Query Language)类似,但更接近...
在Hibernate中,提供了多种检索对象的方式,包括但不限于导航对象图检索方式、OID检索方式、HQL检索方式、QBC检索方式以及本地SQL检索方式。 #### 二、具体检索方式介绍 ##### 1. 导航对象图检索方式 导航对象图...
HQL 是 Hibernate 最常用的检索方式,它支持所有 SQL 支持的检索方式。HQL 是一种面向对象的查询语言,可以使用 HQL 语句来检索对象。 步骤: 1. 获得 Session 2. 编写 HQL 3. 通过 session.createQuery(hql) 创建...
《浪磬J2EE第一期 Hibernate专题 第六讲 检索方式》 在J2EE开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本讲主要聚焦于Hibernate的检索方式,通过深入探讨和实践,我们将...
本人在厦门邦初培训时候 使用的快速入门精简文档 Session缓存的作用 Session清理缓存的时间点 对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象...QBC检索方式 本地SQL检索方式
总结hibernate框架的常用检索方式 1、hibernate框架的检索方式有以下几种: OID检索:根据唯一标识OID检索数据 对象导航检索:根据某个对象导航查询与该对象关联的对象数据 HQL检索:通过query接口对象查询 QBC...
Hibernate提供了多种方式来查询数据,包括HQL、QBC和本地SQL。 - **HQL (Hibernate Query Language)**:一种面向对象的查询语言,类似于SQL但更加面向对象。 - **QBC (Query By Criteria)**:基于标准的API提供了一...
QBC的相关讲义和例题 QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。
- "2018-7-27-Hibernate-检索方式.pptx"可能涵盖了Hibernate的多种检索方式,如Query、Criteria、HQL等,以及它们的使用场景和优缺点。 - "04-2018-7-8-Hibernate-functiongtest.pptx"可能是关于函数测试和Hibernate...
### Hibernate的检索方式 1. **导航对象图检索**:通过已加载的对象来访问与其关联的对象,这种检索方式依赖于对象间的关联关系。 2. **OID检索**:OID即Object Identity,通过对象的唯一标识符进行检索。这种方式...
17.1.2 QBC检索方式 17.1.3 本地SQL检索方式 17.1.4 关于本章范例程序 17.1.5 使用别名 17.1.6 多态查询 17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1...
在讲解Hibernate检索方式之前,我们需要先了解Hibernate的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供数据持久化服务。通过Hibernate,开发者可以使用Java对象来实现...
HQL(Hibernate Query Language)和QBC(Query By Example)是Hibernate提供的两种主要的查询方式,它们提供了灵活且强大的查询能力。下面将详细阐述这两种查询方式以及它们的查询条件。 **HQL(Hibernate Query ...
QBC是基于Java API的查询方式,适用于对Java对象进行条件检索。通过Criteria接口,可以构建复杂的查询条件。例如,根据用户名和年龄查询用户: ```java Criteria criteria = session.createCriteria(User.class);...
- QBC检索:基于Query By Criteria的检索方式,无需编写SQL语句。 - 本地SQL检索:直接使用原生SQL语句进行数据检索。 2. Hibernate中Java对象的状态主要有三种: - 临时状态(transient):对象存在于Java...
Hibernate提供了多种检索数据的方式,包括HQL(Hibernate Query Language)和QBC(Query By Example)。HQL是一种面向对象的查询语言,类似于SQL但更关注对象和类。QBC则是通过对象实例进行查询,更灵活。此外,还...
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、...