`

Hibernate的QBC检索方式

阅读更多

一直习惯了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()

分享到:
评论

相关推荐

    Hibernate的检索方式

    #### 四、QBC检索方式 QBC(Query By Criteria)是一种基于API的检索方式,它允许开发者通过编程方式构建查询条件。QBC使用`Criteria`、`Criterion`和`Expression`接口来定义查询条件。 **特点**: - **灵活性**:...

    Hibernate_QBC和Hibernate_QBE

    QBC和QBE是Hibernate提供的两种不同类型的查询接口,旨在简化数据检索过程。 Query By Criteria(QBC)是一种基于对象的查询方式,它允许开发者通过构建Criteria对象来描述查询条件,然后由Hibernate自动转换为相应...

    Hibernate QBC分页

    本篇将详细介绍如何使用Hibernate的Query By Criteria (QBC)方式进行分页查询。 首先,我们需要了解QBC的基本概念。QBC是Hibernate提供的一种基于对象的查询方式,与HQL(Hibernate Query Language)类似,但更接近...

    Hibernate检索方式

    在Hibernate中,提供了多种检索对象的方式,包括但不限于导航对象图检索方式、OID检索方式、HQL检索方式、QBC检索方式以及本地SQL检索方式。 #### 二、具体检索方式介绍 ##### 1. 导航对象图检索方式 导航对象图...

    java-Hibernate 检索

    HQL 是 Hibernate 最常用的检索方式,它支持所有 SQL 支持的检索方式。HQL 是一种面向对象的查询语言,可以使用 HQL 语句来检索对象。 步骤: 1. 获得 Session 2. 编写 HQL 3. 通过 session.createQuery(hql) 创建...

    浪磬J2EE第一期 Hibernate专题 第六讲 检索方式

    《浪磬J2EE第一期 Hibernate专题 第六讲 检索方式》 在J2EE开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本讲主要聚焦于Hibernate的检索方式,通过深入探讨和实践,我们将...

    Hibernate 对象的状态检索

    本人在厦门邦初培训时候 使用的快速入门精简文档 Session缓存的作用 Session清理缓存的时间点 对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象...QBC检索方式 本地SQL检索方式

    JSP开发中hibernate框架的常用检索方式总结

    总结hibernate框架的常用检索方式 1、hibernate框架的检索方式有以下几种: OID检索:根据唯一标识OID检索数据 对象导航检索:根据某个对象导航查询与该对象关联的对象数据 HQL检索:通过query接口对象查询 QBC...

    hibernate基础 注解开发 检索

    Hibernate提供了多种方式来查询数据,包括HQL、QBC和本地SQL。 - **HQL (Hibernate Query Language)**:一种面向对象的查询语言,类似于SQL但更加面向对象。 - **QBC (Query By Criteria)**:基于标准的API提供了一...

    QBC的相关讲义和例题

    QBC的相关讲义和例题 QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。

    Hibernate 简单 PPT 总结

    - "2018-7-27-Hibernate-检索方式.pptx"可能涵盖了Hibernate的多种检索方式,如Query、Criteria、HQL等,以及它们的使用场景和优缺点。 - "04-2018-7-8-Hibernate-functiongtest.pptx"可能是关于函数测试和Hibernate...

    Hibernate常见面试题

    ### Hibernate的检索方式 1. **导航对象图检索**:通过已加载的对象来访问与其关联的对象,这种检索方式依赖于对象间的关联关系。 2. **OID检索**:OID即Object Identity,通过对象的唯一标识符进行检索。这种方式...

    hibernate教程hibernate教程

    Hibernate提供了多种检索数据的方式,包括HQL(Hibernate Query Language)和QBC(Query By Example)。HQL是一种面向对象的查询语言,类似于SQL但更关注对象和类。QBC则是通过对象实例进行查询,更灵活。此外,还...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

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

    传智168期JavaEE hibernate 姜涛 day36~day37(by阿滔)

    在讲解Hibernate检索方式之前,我们需要先了解Hibernate的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供数据持久化服务。通过Hibernate,开发者可以使用Java对象来实现...

    HQL与QBC的查询条件.doc

    HQL(Hibernate Query Language)和QBC(Query By Example)是Hibernate提供的两种主要的查询方式,它们提供了灵活且强大的查询能力。下面将详细阐述这两种查询方式以及它们的查询条件。 **HQL(Hibernate Query ...

    hibernate 数据库操作方法

    QBC是基于Java API的查询方式,适用于对Java对象进行条件检索。通过Criteria接口,可以构建复杂的查询条件。例如,根据用户名和年龄查询用户: ```java Criteria criteria = session.createCriteria(User.class);...

    [尚硅谷]_佟刚_Hibernate面试题分析

    - QBC检索:基于Query By Criteria的检索方式,无需编写SQL语句。 - 本地SQL检索:直接使用原生SQL语句进行数据检索。 2. Hibernate中Java对象的状态主要有三种: - 临时状态(transient):对象存在于Java...

    Hibernate 课件及源代码

    内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、...

Global site tag (gtag.js) - Google Analytics