`
cuisuqiang
  • 浏览: 3962736 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672110
社区版块
存档分类
最新评论

Hibernate的查询 标准(Criteria)查询

    博客分类:
  • SSH
阅读更多

一个简单例子:

@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

 

2
1
分享到:
评论

相关推荐

    Hibernate-Criteria 模糊查询

    `Criteria`是Hibernate提供的一个用于执行查询的标准API,它基于对象模型而不是SQL语句来构建查询,这使得开发人员能够以面向对象的方式进行数据库操作,避免了直接编写SQL带来的复杂性和潜在错误。通过`Criteria`,...

    hibernate查询详解

    例如,对于简单的查询,HQL和Criteria查询可能更为合适;对于复杂的SQL操作,可能需要使用SQL查询;而对于需要复用的查询,命名查询则很有价值。理解并掌握这些查询方式,能够使你在处理数据库操作时更加得心应手。

    hibernate criteria的使用方法

    2. **Criterion**:`org.hibernate.criterion.Criterion` 接口定义了一个查询标准,用于表示查询条件。 3. **Restrictions**:`org.hibernate.criterion.Restrictions` 类提供了一系列静态工厂方法,用于创建 ...

    hibernate多表联合查询

    - 在Native SQL查询中,我们直接使用标准的SQL语法。 - 使用`createSQLQuery()`方法来创建一个SQL查询对象。 - 通过`addEntity()`方法将查询结果映射到自定义的`CustomerSummary`类。 #### 六、总结 通过以上两种...

    hibernate 查询?Hibernate的HQL查询

    【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生SQL查询。其中,HQL作为官方推荐的查询方式,具有...

    Hibernate Criteria用法大全.docx

    Hibernate Criteria API 是一种面向对象的查询方式,它提供了一种比HQL(Hibernate Query Language)更为简洁且直观的查询手段。通过Criteria API,开发者可以构建复杂的查询条件,无需直接编写SQL,使得代码更加...

    Hibernate中Criteria的完整用法

    在Hibernate框架中,`Criteria`是一种非常实用且灵活的对象查询方式。它允许开发者通过构造一个`Criteria`对象来定义复杂的查询逻辑,从而实现对数据库中数据的高效检索。本文将详细介绍`Criteria`的基本概念、常用...

    hibernate中的查询方式

    #### 二、Criteria查询 Criteria API提供了一种更为灵活和强大的查询方式,它基于标准的Java对象模型来构建查询条件,支持动态创建查询条件。 **特点:** - **面向对象:** Criteria API完全基于对象,这使得它...

    Hibernate part 14:查询及数据库并发事务

    2. **Criteria API**:除了HQL,Hibernate还提供了Criteria API,这是一种更加面向对象的查询方式,允许动态构建查询条件,适用于那些查询条件在运行时不确定的情况。 3. **JPQL(Java Persistence Query Language...

    hibernate基础jar包

    - hibernate-core.jar:这是Hibernate的核心库,包含了实体管理、会话工厂、查询语言(HQL和Criteria API)等关键功能。 - hibernate-entitymanager.jar:提供JPA(Java Persistence API)支持,允许开发者遵循...

    hibernate-Criteria

    在Hibernate中,`Criteria`接口是Criteria查询的基础。要创建一个Criteria实例,可以使用`Session`对象的`createCriteria`方法,该方法接收一个参数,即要查询的实体类类型。例如: ```java Criteria crit = sess....

    java hibernate Criteria

    在Java开发中,特别是涉及到数据库操作时,Hibernate作为一款优秀的对象关系映射(ORM)工具,提供了多种查询方式,其中包括了HQL(Hibernate Query Language)、SQL以及Criteria API等。本文将重点介绍Criteria API...

    Hibernate三大类查询总结.doc

    在处理数据库查询时,Hibernate提供了三种主要的查询方式:Criteria查询、HQL(Hibernate Query Language)和本地SQL。本文将详细探讨这三种查询方式的区别与用法。 首先,Criteria查询是Hibernate提供的一种面向...

    Hibernate官方标准API

    《Hibernate官方标准API详解》 Hibernate作为一款强大的对象关系映射(ORM)框架,为Java开发者提供了丰富的API,使得数据库操作更加便捷高效。本文将深入探讨Hibernate的官方标准API,涵盖其核心概念、主要接口...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    ### Hibernate 查询方式与批处理及连接池配置详解 #### 一、Hibernate 查询方式介绍 Hibernate 是一款优秀的 ORM(对象关系映射)框架,它能够极大地简化数据库操作,并提供多种查询方式来满足不同的业务需求。 #...

    Hibernate 查询体系

    1. **Criteria API**:这是一种基于标准的 Java 接口(如 JPA Criteria API)的查询方式,允许用户通过构建查询标准对象来进行复杂查询。 2. **Native SQL 查询**:当需要执行特定于某种数据库的 SQL 语句时,可以...

    struts+hibernate+jdbc双表查询

    总结起来,"struts+hibernate+jdbc双表查询"是关于如何在Java Web项目中,利用Struts处理请求,Hibernate管理数据对象与数据库的映射,以及JDBC进行复杂数据库操作,特别是涉及到两个表之间的联合查询。在实际开发中...

    Criteria使用方法

    Hibernate作为Java领域中最流行的ORM(Object Relational Mapping)框架之一,提供了多种查询数据的方式,其中Criteria API因其强大的功能和灵活性而备受开发者青睐。 本文将详细介绍Hibernate中Criteria接口的常见...

    hibernate-3.2源代码

    4. Criteria查询:提供了一种面向对象的方式来构建查询,比HQL更为灵活。 5. Query和Criteria API:提供了强大的查询能力,支持复杂的查询条件和结果集处理。 三、配置与初始化 Hibernate的配置文件(hibernate.cfg...

Global site tag (gtag.js) - Google Analytics