Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:
Java代码
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:
Java代码
Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")
Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。
Expression.gt 对应SQL中的 “field > value ” 表达式
Expression.ge 对应SQL中的 “field >= value” 表达式
Expression.lt 对应SQL中的 “field < value” 表达式
Expression.le 对应SQL中的 “field <= value” 表达式
Expression.between 对应SQL中的 “between” 表达式
如下面的表达式表示年龄(age)位于13到50区间内。
Java代码
Expression.between("age",new Integer(13),new Integer(50));
表达式
Java代码
Expression.in 对应SQL中的 ”field in …” 表达式
Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:
Expression.eqProperty( "TUser.groupID", "TGroup.id" );
Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。
Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。
Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。
Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。
Expression.and and关系组合。 如:
Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );
Expression.or or关系组合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:
Java代码
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:
Java代码
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Java代码
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:
Java代码
Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")
Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。
Expression.gt 对应SQL中的 “field > value ” 表达式
Expression.ge 对应SQL中的 “field >= value” 表达式
Expression.lt 对应SQL中的 “field < value” 表达式
Expression.le 对应SQL中的 “field <= value” 表达式
Expression.between 对应SQL中的 “between” 表达式
如下面的表达式表示年龄(age)位于13到50区间内。
Java代码
Expression.between("age",new Integer(13),new Integer(50));
表达式
Java代码
Expression.in 对应SQL中的 ”field in …” 表达式
Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:
Expression.eqProperty( "TUser.groupID", "TGroup.id" );
Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。
Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。
Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。
Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。
Expression.and and关系组合。 如:
Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );
Expression.or or关系组合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:
Java代码
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:
Java代码
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
发表评论
-
List<Map> 排序
2016-08-03 11:03 941import java.util.ArrayList; im ... -
sql存储过程几个简单例子
2016-07-22 08:42 462导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些 ... -
相对路径和绝对路径的区别,java获取项目访问路径的方法
2016-07-19 13:58 655相对路径和绝对路径的区别 在HTML里只要涉及文件的地方( ... -
POI 单元格
2016-07-07 11:48 488POI 单元格合并中的CellRangeAddress 参数: ... -
Java的内存机制
2016-06-28 11:40 5911.Java的内存机制 Java 把内存划分成两种:一种是 ... -
StringBuffer和StringBuilder的区别
2016-06-28 11:36 444StringBuffer、StringBuilder和Stri ... -
平均分割list
2016-06-26 19:22 1228private static List<List< ... -
定时任务&&找出两个list的不同
2016-06-21 13:55 368/*-------------------------appl ... -
时间类
2016-06-21 13:38 525/* * Licensed to the Apache S ... -
常用map总结
2016-06-21 09:39 421Map map = new HashMap(); I ... -
遍历listmap 遍历map
2016-04-27 16:23 546package excel; import java ... -
SQL 递归
2016-03-29 14:34 516向上 WITH RECURSIVE r AS ( SELE ... -
oracle 面试题
2016-02-02 15:53 10191、对数据库SQL2005、ORACLE熟悉吗? SQL ... -
List和ArrayList的区别
2016-01-28 09:38 523List和ArrayList的区别 List是一个接口,而Li ... -
StringUtils.isEmpty用法
2016-01-28 09:21 679StringUtils 方法的操作对象是 java.lang. ... -
java中重载与重写的区别
2016-01-27 13:50 535java中重载与重写的区别 ... -
loginfilter
2016-01-26 16:02 334dabdabdabdabdabdabdab -
数据库连接driverClass和jdbcUrl大全
2016-01-25 14:09 1153一、MySQL: driverClass:com.mysql ... -
postgre--(待补)
2016-01-18 10:49 522postgre--(待补) -
查询并删除重复记录的SQL语句
2015-11-20 15:38 601查询及删除重复记录的SQL语句 1、查找表中 ...
相关推荐
1. **创建CriteriaQuery对象**: 首先,我们需要实例化CriteriaQuery,并指定返回的实体类型。 2. **设置Root**: 指定查询的实体,并关联到对应的数据库表。 3. **构建Predicate**: 使用CriteriaBuilder创建各种...
CriteriaQuery<YourEntityName> criteriaQuery = builder.createQuery(YourEntityName.class); Root<YourEntityName> root = criteriaQuery.from(YourEntityName.class); TypedQuery<YourEntityName> typedQuery ...
Hibernate 中 Criteria 的完整用法 Hibernate 中 Criteria 的完整用法是 Hibernate 框架中的一种查询机制,允许开发者灵活地根据查询条件来组装查询语句。在使用 Spring 和 Hibernate 进行开发时,Criteria 的优势...
### Hibernat 使用Criteria查询多对多关系(SET集合)条件 #### 背景介绍与概念理解 在Java开发中,特别是在企业级应用中,持久化层的处理至关重要。Hibernate作为一款流行的Java持久化框架,它提供了一种非常简便...
CriteriaQuery<?> criteriaQuery = builder.createQuery(); Root<?> root = criteriaQuery.from(entityClass); // ...构建查询条件... Query<?> query = entityManager.createQuery(criteriaQuery); query.setHint...
Criteria API基于CriteriaQuery接口,提供了丰富的查询选项,包括排序、分页、聚合函数等,这使得开发者能够更加灵活地进行数据检索。 ### 使用Criteria进行基本查询 在给定的部分内容中,首先展示的是如何使用...
Hibernate提供了多种查询方式,包括HQL(Hibernate Query Language)、Criteria Query和SQL查询。 1. Criteria Query: Criteria Query 是一种面向对象的查询方式,它允许我们通过构建Criteria对象来表示查询条件...
【J2EE Hibernate-4.ppt】主要讲解了在J2EE环境中使用Hibernate框架进行数据检索的方法,特别是Criteria Query的使用。Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库...
Spring Data JPA 提供了多种方式来实现分页查询,包括使用 `Pageable`、`Specification` 和 `CriteriaQuery` 等。 使用 Pageable 实现分页查询 使用 `Pageable` 是 Spring Data JPA 中最简单的分页查询方式。可以...
- 新增强的Hibernate Criteria Query API,提供了更多高级的查询构建选项。 - HQL,作为核心的查询语言,支持更广泛的查询模式。 - 对于原生SQL方言的支持得到了增强,允许开发者直接使用特定数据库的SQL特性。 ###...
CriteriaQuery cq = new CriteriaQuery(Role.class, curPageNO, myaction); cq.setPageSize(10); PageSupport ps = BeanFactory.getInstance().getRightDelegate().findAllRole(cq, state); long l2 = System....
然后使用`CriteriaBuilder`来创建一个`CriteriaQuery`实例,并指定了返回类型为`Person`。接下来,我们定义了一个查询根(`Root`),并使用`CriteriaBuilder`提供的方法来构建查询条件。最后,我们使用`EntityManager`...
CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class); Root<User> root = criteriaQuery.from(User.class); Predicate condition = criteriaBuilder.equal(root.get("username"), ...
- `CriteriaQuery`是用于封装Hibernate的QBC(Query By Criteria)查询的类,它接收实体类、当前操作的Action名称以及分页参数。在服务层,`findAllRole`方法将这些参数传递下去,并通过`getDelegate().execute(req)...
【Hibernate学习笔记】深入探讨Criteria Query 在Java的持久化框架Hibernate中,Criteria Query是一种强大的查询方式,它允许开发者以面向对象的方式构建SQL查询。这种查询方式提供了比HQL(Hibernate Query ...
javax.persistence.criteria.CriteriaQuery.class javax.persistence.criteria.Expression.class javax.persistence.criteria.Fetch.class javax.persistence.criteria.FetchParent.class javax.persistence....
9. CriteriaQuery和Root:CriteriaQuery用于定义查询的基本元素,如选择字段、指定条件等;Root则代表了查询的根实体,用于关联实体和查询。 10. Hibernate事件和监听器:允许开发者在特定操作(如对象加载、保存、...
CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); cq.where(cb.equal(root.get("deleted"), false)); TypedQuery<User> query = session.createQuery(cq); List...
文档继续描述了Hibernate的两种查询方式,HQL(Hibernate Query Language)和Criteria Query。HQL是类似于SQL的查询语言,用于执行面向对象的查询操作。Criteria Query则提供了一种类型安全的方式来创建查询,它使用...