转自http://www.blogjava.net/yzzh9/archive/2008/10/08/233236.html
要对资料库管理系统进行操作,最基本的就是使用SQL(Structured Query Language)语句,大部份的资料库都支援标准的SQL语句,然而也有一些特定于资料库的SQL语句,应用程式配合SQL语句进行资料库查询时,若使用到特定于资料库的SQL语句,程式本身会有相依于特定资料库的问题。
使用Hibernate时,即使您不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询, org.hibernate.Criteria对SQL进行封装,您可以从Java物件的观点来组合各种查询条件,由Hibernate自动为您产生 SQL语句,而不用特别管理SQL与资料库相依的问题,就某个程度的意涵来看,这就像是在编译时期也可以得到对SQL语法的检查与验证。
以最基本的查询来说,如果您想要查询某个物件所对应的资料表中所有的内容,您可以如下进行查询:
Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
for(Iterator it = users.iterator(); it.hasNext(); ) {
User user = (User) it.next();
System.out.println(user.getId() +
" /t " + user.getName() +
"/" + user.getAge());
}
Criteria建立后,若不给予任何的条件,预设是查询物件所对应表格之所有资料,如果您执行以上的程式片段,并于设定档中设定了了Hibernate的”show_sql”属性,则可以在主控下看到以下的SQL语句之产生:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_
org.hibernate.Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用 org.hibernate.criterion.Restrictions的各种静态方法传回 org.hibernate.criterion.Criteria实例,传回的每个org.hibernate.criterion.Criteria 实例代表着一个条件,您要使用org.hibernate.Criteria的add()方法加入这些条件实例,例如查询” age”大于20且小于40的资料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();
for(Iterator it = users.iterator(); it.hasNext(); ) {
User user = (User) it.next();
System.out.println(user.getId() +
" /t " + user.getName() +
"/" + user.getAge());
}
Restrictions的gt()方法表示大于(great than)的条件,而lt表示小于(less than)的条件,执行以上程式片段,观察所产生的SQL语句,将使用where与and子句产来完成SQL的条件查询:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.age>? and this_.age<?
使用add()方法加入条件时,预设是使用and来组合条件,如果要用or的方式来组合条件,则可以使用Restrictions.or()方法,例如结合age等于(eq)20或(or)age为空(isNull)的条件:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(
Restrictions.eq("age", new Integer(20)),
Restrictions.isNull("age")
));
List users = criteria.list();
观察所产生的SQL语句,将使用where与or子句完成SQL的条件查询:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=? or this_.age is null)
您也可以使用Restrictions.like()方法来进行SQL中like子句的功能,例如查询”name”中名称为”just”开头的资料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.like("name", "just%"));
List users = criteria.list();
观察所产生的SQL语句如下:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.name like ?
Restrictions的几个常用限定查询方法如下表所示:
方法 |
说明 |
Restrictions.eq |
等于 |
Restrictions.allEq |
使用Map,使用key/value进行多个等于的比对 |
Restrictions.gt |
大于 > |
Restrictions.ge |
大于等于 >= |
Restrictions.lt |
小于 < |
Restrictions.le |
小于等于 <= |
Restrictions.between |
对应SQL的BETWEEN子句 |
Restrictions.like |
对应SQL的LIKE子句 |
Restrictions.in |
对应SQL的in子句 |
Restrictions.and |
and关系 |
Restrictions.or |
or关系 |
Restrictions.sqlRestriction |
SQL限定查询 |
分享到:
相关推荐
除了基本的模糊查询,`Criteria`还支持更复杂的查询构造,包括但不限于: 1. **条件组合**:你可以使用`Expression`的`and`或`or`方法来组合多个查询条件,以满足更为复杂的查询逻辑。 ```java Expression expr...
在深入探讨Hibernate与Criteria结合进行模糊查询之前,我们先来了解一下Hibernate和Criteria的基本概念,以及为何选择使用它们进行模糊查询。 ### Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)...
这是使用 Criteria 进行查询的基本步骤。 五、Criteria 的其他用法 Criteria 还提供了其他一些有用的用法,如设置 FetchMode(联合查询抓取的模式)、设置排序方式、设置 FlushModel(冲刷 Session 的方式)和 ...
Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...
在Java持久层框架Hibernate中,Criteria API是一种动态构建SQL查询的方法,它允许开发者在运行时构建查询,提供了更面向对象的查询方式。本篇将详细阐述Hibernate Criteria API的使用。 首先,Criteria API由...
Hibernate中的Criteria API是一种用于执行动态查询的机制,它允许开发者在运行时构建SQL查询,而无需直接编写SQL语句。Criteria API提供了更加面向对象的方式来处理数据库查询,这使得代码更易于理解和维护,尤其是...
2. **Criteria查询的基本构造** 要开始一个Criteria查询,首先需要获取到Session对象,然后调用createCriteria()方法,指定要查询的实体类。例如: ```java Session session = sessionFactory.openSession(); ...
Criteria接口是Criteria API的核心,它是用于创建查询的基本构建块。Criteria对象通常由SessionFactory或Session的createCriteria()方法创建,它代表了一个实体类的查询。而DetachedCriteria则是一个独立的对象,...
Criteria查询构建于会话(Session)之上,它允许进行复杂查询而无需编写HQL或SQL语句,通过一系列方法调用来完成查询的构建。 #### 三、创建Criteria实例 首先,我们需要了解如何创建Criteria实例。这可以通过...
### Hibernate Criteria 分组、排序与关联查询详解 #### 标题与描述理解 - **标题**:“hibernate criteria 分组 排序 关联”这一标题明确了本文将围绕Hibernate Criteria API进行分组、排序以及关联查询的具体...
本文详细介绍了 Hibernate Criteria API 的使用方法,包括基本概念、创建查询实例、添加查询条件以及示例代码分析。通过 Criteria API 可以轻松地构建复杂的查询条件,并且由于其类型安全的特性,可以有效减少编程...
- hibernate-core.jar:这是Hibernate的核心库,包含了实体管理、会话工厂、查询语言(HQL和Criteria API)等关键功能。 - hibernate-entitymanager.jar:提供JPA(Java Persistence API)支持,允许开发者遵循...
通过上述详细解析,我们可以看到Hibernate的Criteria查询提供了丰富的功能,不仅限于基本的等值和不等值条件,还包括范围、模式匹配、集合成员判断,以及更复杂的统计分析。掌握这些查询技巧,对于优化数据检索和...
通过上述介绍,我们可以看到,Hibernate的Criteria API提供了一个强大且灵活的数据查询解决方案,它不仅支持基本的查询需求,还能处理复杂的查询场景,如排序、分页、聚合函数、分组统计以及条件过滤等。这使得开发...
Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用于不同的场景,使得开发者可以根据实际需求灵活选择。 1. Hibernate ...
《Hibernate深入研究之Criteria》 Hibernate作为Java领域中的一款强大持久化框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑,而非繁琐的SQL语句。本篇将重点探讨Hibernate中的Criteria API,这是...
Criteria查询的基本使用步骤包括以下几个方面: 1. 创建Criteria对象:首先,我们需要从Session对象上调用createCriteria()方法来创建Criteria实例,指定要查询的实体类。 ```java Session session = ...
除了这些基本查询,Hibernate还支持更复杂的操作,如分页查询、排序、联接查询等。例如,如果我们想按用户名降序分页查询用户,可以这样做: ```java Criteria criteria = session.createCriteria(User.class) ....