一个简单例子:
@SuppressWarnings("unchecked") public void searchByPropertys() { Session session = this.getSession(); Criteria crit = session.createCriteria(Conft.class); List<Conft> list = crit.list(); for(Conft c : list){ System.out.println(c.getId()); } }
标准查询API最终仍然翻译为SQL交由数据库处理,返回java.util.List对象
怎么增加条件呢?请看如下代码:
public void searchByPropertys() { Session session = this.getSession(); Criteria crit = session.createCriteria(Conft.class); crit.add(Restrictions.eq("id", 2)); // = crit.add(Restrictions.ne("id", 2)); // != crit.add(Restrictions.lt("id", 2)); // < crit.add(Restrictions.gt("id", 2)); // > crit.add(Restrictions.le("id", 2)); // <= crit.add(Restrictions.ge("id", 2)); // >= crit.add(Restrictions.in("id", new String[]{"2"})); // in crit.add(Restrictions.like("id", "%2%")); // like crit.add(Restrictions.like("id", "2",MatchMode.ANYWHERE)); // %x% crit.add(Restrictions.like("id", "2",MatchMode.START)); // x% crit.add(Restrictions.like("id", "2",MatchMode.END)); // %x crit.add(Restrictions.like("id", "2",MatchMode.EXACT)); // x List<Conft> list = crit.list(); for(Conft c : list){ System.out.println(c.getId()); } }
代码后面写出了增加条件的方式和意思。
如果有and或者是or的关系的话,可以使用Conjunction(AND)和Disjunction(OR)!
下面是一个使用示例:
public void searchByPropertys() { Session session = this.getSession(); Criteria crit = session.createCriteria(Conft.class); // 创建条件 Criterion a = Restrictions.gt("id", 2); // > Criterion b = Restrictions.lt("id", 2); // < Criterion c = Restrictions.like("id", "2",MatchMode.ANYWHERE); // and 关系 Conjunction conjunction = Restrictions.conjunction(); conjunction.add(a); conjunction.add(b); // or 关系 Disjunction disjunction = Restrictions.disjunction(); disjunction.add(conjunction); disjunction.add(c); // 增加查询条件 crit.add(disjunction); List<Conft> list = crit.list(); for(Conft conft : list){ System.out.println(conft.getId()); } }
a和b是AND关系,而a和b合起来作为条件后和c是OR关系!
如果看他的SQL的话,是这样的,有助于理解:
(where (a>? and b<?) or c like ?)
除此之外还可以使用sqlRestriction方法直接拼接SQL
public User getUserById(int pk){ Session session = this.getSession(); Criteria crit = session.createCriteria(User.class); crit.add(Restrictions.sqlRestriction(" {alias}.id=2 ")); List<User> list = crit.list(); return (User)list.get(0); }
注意{alias}是表的名称,这个不用修改,Hibernate在生成SQL时会自动替换!
在源码中可以看到:
public static Criterion sqlRestriction(String sql, Object values[], Type types[]) { return new SQLCriterion(sql, values, types); } public static Criterion sqlRestriction(String sql, Object value, Type type) { return new SQLCriterion(sql, new Object[] { value }, new Type[] { type }); } public static Criterion sqlRestriction(String sql) { return new SQLCriterion(sql, ArrayHelper.EMPTY_OBJECT_ARRAY, ArrayHelper.EMPTY_TYPE_ARRAY); }
也就是说这个方法有三个调用方式,直接写SQL,如果你的SQL中有 ? 作为占位符,那么可设置后面两个参数,第二个参数对应 ? ,第三个是参数字段的类型!
如果有多个 ? ,那么第二和第三个参数就要用数组的形式来传递!
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
相关推荐
`Criteria`是Hibernate提供的一个用于执行查询的标准API,它基于对象模型而不是SQL语句来构建查询,这使得开发人员能够以面向对象的方式进行数据库操作,避免了直接编写SQL带来的复杂性和潜在错误。通过`Criteria`,...
例如,对于简单的查询,HQL和Criteria查询可能更为合适;对于复杂的SQL操作,可能需要使用SQL查询;而对于需要复用的查询,命名查询则很有价值。理解并掌握这些查询方式,能够使你在处理数据库操作时更加得心应手。
2. **Criterion**:`org.hibernate.criterion.Criterion` 接口定义了一个查询标准,用于表示查询条件。 3. **Restrictions**:`org.hibernate.criterion.Restrictions` 类提供了一系列静态工厂方法,用于创建 ...
- 在Native SQL查询中,我们直接使用标准的SQL语法。 - 使用`createSQLQuery()`方法来创建一个SQL查询对象。 - 通过`addEntity()`方法将查询结果映射到自定义的`CustomerSummary`类。 #### 六、总结 通过以上两种...
【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生SQL查询。其中,HQL作为官方推荐的查询方式,具有...
Hibernate Criteria API 是一种面向对象的查询方式,它提供了一种比HQL(Hibernate Query Language)更为简洁且直观的查询手段。通过Criteria API,开发者可以构建复杂的查询条件,无需直接编写SQL,使得代码更加...
在Hibernate框架中,`Criteria`是一种非常实用且灵活的对象查询方式。它允许开发者通过构造一个`Criteria`对象来定义复杂的查询逻辑,从而实现对数据库中数据的高效检索。本文将详细介绍`Criteria`的基本概念、常用...
#### 二、Criteria查询 Criteria API提供了一种更为灵活和强大的查询方式,它基于标准的Java对象模型来构建查询条件,支持动态创建查询条件。 **特点:** - **面向对象:** Criteria API完全基于对象,这使得它...
2. **Criteria API**:除了HQL,Hibernate还提供了Criteria API,这是一种更加面向对象的查询方式,允许动态构建查询条件,适用于那些查询条件在运行时不确定的情况。 3. **JPQL(Java Persistence Query Language...
- hibernate-core.jar:这是Hibernate的核心库,包含了实体管理、会话工厂、查询语言(HQL和Criteria API)等关键功能。 - hibernate-entitymanager.jar:提供JPA(Java Persistence API)支持,允许开发者遵循...
在Hibernate中,`Criteria`接口是Criteria查询的基础。要创建一个Criteria实例,可以使用`Session`对象的`createCriteria`方法,该方法接收一个参数,即要查询的实体类类型。例如: ```java Criteria crit = sess....
在Java开发中,特别是涉及到数据库操作时,Hibernate作为一款优秀的对象关系映射(ORM)工具,提供了多种查询方式,其中包括了HQL(Hibernate Query Language)、SQL以及Criteria API等。本文将重点介绍Criteria API...
在处理数据库查询时,Hibernate提供了三种主要的查询方式:Criteria查询、HQL(Hibernate Query Language)和本地SQL。本文将详细探讨这三种查询方式的区别与用法。 首先,Criteria查询是Hibernate提供的一种面向...
《Hibernate官方标准API详解》 Hibernate作为一款强大的对象关系映射(ORM)框架,为Java开发者提供了丰富的API,使得数据库操作更加便捷高效。本文将深入探讨Hibernate的官方标准API,涵盖其核心概念、主要接口...
### Hibernate 查询方式与批处理及连接池配置详解 #### 一、Hibernate 查询方式介绍 Hibernate 是一款优秀的 ORM(对象关系映射)框架,它能够极大地简化数据库操作,并提供多种查询方式来满足不同的业务需求。 #...
总结起来,"struts+hibernate+jdbc双表查询"是关于如何在Java Web项目中,利用Struts处理请求,Hibernate管理数据对象与数据库的映射,以及JDBC进行复杂数据库操作,特别是涉及到两个表之间的联合查询。在实际开发中...
Hibernate作为Java领域中最流行的ORM(Object Relational Mapping)框架之一,提供了多种查询数据的方式,其中Criteria API因其强大的功能和灵活性而备受开发者青睐。 本文将详细介绍Hibernate中Criteria接口的常见...
4. Criteria查询:提供了一种面向对象的方式来构建查询,比HQL更为灵活。 5. Query和Criteria API:提供了强大的查询能力,支持复杂的查询条件和结果集处理。 三、配置与初始化 Hibernate的配置文件(hibernate.cfg...