`

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 对象的状态检索

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

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

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

    hibernate基础 注解开发 检索

    hibernate的注解开发 注解开发关联映射 HQL、QBC、本地SQL检索数据

    QBC的相关讲义和例题

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

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

    Hibernate 课件及源代码

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

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

     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:Java 对象持久化技术详解(第2版).part3

     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:Java 对象持久化技术详解(第2版).part1.rar

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

    java 经典面试题 于网络分享

    5. Java语言中,方法的重写...8.以下哪些不是Hibernate的检索方式: A、导航对象图检索 B、OID检索 C、ORM检索 D、QBC检索 E、本地SQL检索 F、HQL检索 答案:C 9.以下代码定义了一个变量,如何输出这个变量的值?

    葵花宝典java面试

    1.Hibernate的检索方式 答:①导航对象图检索? ②OID检索? ③HQL检索? ④QBC检索? ⑤本地SQL检索 2. Forward与Global-Forward的区别 答:Forward是根据Action return的值找到对应的JSP页。当多个Action共同return...

    hibernate总结

    Hibernate的检索方式:(查询/加载) 1. 通过OID加载 session.get(Users.class, 1); * 2. 通过HQL/SQL 检索 hibernate query language (面向对象的查询语言) * a) 不再操纵表,它操纵的是持久化类的对象 b) 面向...

    通俗易懂的Hibernate教程(含配套资料)

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

    JAVA网站开发中的数据检索技术

    数据检索也可以称为数据查询,是对数据库中一个或多个数据表进行查询,并将查询结果反馈给用户。...在J2EE中,通常支持以下3中数据检索技术,即JDBC中的支持的SQL查询、Hibernate中支持的HQL和QBC查询。

    Java Web程序设计教程

    9.2.2qbc方式 194 9.2.3原生sql方式 195 9.3hibernate的关联查询 196 9.3.1一对一关联关系的使用 196 9.3.2一对多、多对一关联关系的使用 197 9.3.3多对多关联关系的使用 199 9.4hibernate过滤 201 9.4.1...

    低清版 大型门户网站是这样炼成的.pdf

    5.4 qbc查询方式 314 5.4.1 基本查询 315 5.4.2 qbe查询 317 5.4.3 分页查询 318 5.4.4 复合查询 318 5.4.5 离线查询 319 5.5 本地sql查询 320 5.6 hibernate的批量处理 322 5.6.1 批量插入 322 5.6.2 批量...

    jdbc基础和参考

    1.hibernate提供的更面向对象的一种查询方式。 准备工作: 1.java中的POJO对象存在 2.数据库,表得存在 3.hibernate的配置文件(hibernate.cfg.xml)得存在 4.POJO.hbm.xml文件存在 5.hibernate的jar包以及数据库的...

Global site tag (gtag.js) - Google Analytics